Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движение персонажа 
:(
    Опции темы
tihomir
  Дата 26.2.2014, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.2.2014

Репутация: нет
Всего: нет



Здравствуйте многоуважаемые Гуру!! У меня такая ситуация: есть персонаж(волк) он нарисован в двух символах 1 когда волк стоит(stopwolf) 2 когда волк шагает(gowolf), захотел я значит его научить ходить с помощью клавиш влево вправо, но так как я ещё зелен во флеше то он при запуске клипа открывает и первого и второго волка и ещё при движении оставляет шлейф в виде предыдущего нажатия(тоесть я нажал волк перескочил на новое место, но на предыдущем тоже остаётся символ волка) ,а мне хотелось чтобы он при нажатии клавиш влево вправо ходил а когда я отпускаю клавиши он останавливался(тоесть чтобы появлялся 1 символ), а получилась какая-то фигня) Подскажите пожалуйста как это реализовать и где у меня ошибки!!

вот код:
Код


var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var stopwolf1:Stopwolf = new Stopwolf();
addChild(stopwolf1);
stopwolf1.x = 250
stopwolf1.y = 680
var gowolf1:Gowolf = new Gowolf();
addChild(gowolf1);
gowolf1.x = 250
gowolf1.y = 680
var speed = 15;  
    gowolf1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed);
    stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed);
 function fl_MoveInDirectionOfKey(event:Event)
  {
     if (leftPressed && !rightPressed) //если нажата только(!) левая клавиша - шагаем влево
     {
        gowolf1.x -= 5;
        gowolf1.gotoAndStop (2)
     }
     else if (rightPressed && !leftPressed) //если нажата только(!) правая клавиша - шагаем вправо
     {
        gowolf1.x += 5;
        gowolf1.gotoAndStop (2)
     }
     else // если не нажата ни одна из клавиш или нажаты обе одновременно - стоим
     {
        gowolf1.gotoAndStop (1)
     }
  }
 
    function fl_SetKeyPressed(event:KeyboardEvent):void
    {
       switch (event.keyCode)
       {
          case Keyboard.LEFT:
          {
             leftPressed = true;
             break;
          }
          case Keyboard.RIGHT:
          {
             rightPressed = true;
             break;
          }
       }
    }
 
    function fl_UnsetKeyPressed(event:KeyboardEvent):void
    {
       switch (event.keyCode)
       {
          case Keyboard.LEFT:
          {
             leftPressed = false;
             break;
          }
          case Keyboard.RIGHT:
          {
             rightPressed = false;
             break;
          }
       }
    }


Добавлено через 9 минут и 28 секунд
Даже не так, он постоянно выводит на сцену символ gowolf, и получается такая каша из волков 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  косяк.JPG 95,94 Kb
PM MAIL   Вверх
tihomir
  Дата 27.2.2014, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.2.2014

Репутация: нет
Всего: нет



Пробовал удалять объекты со сцены с помощью removeChild 

Код

var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var stopwolf1:Stopwolf = new Stopwolf();
addChild(stopwolf1);
stopwolf1.x = 100
stopwolf1.y = 100
var gowolf1:Gowolf = new Gowolf();
addChild(gowolf1);
gowolf1.x = 100
gowolf1.y = 100
var gowolfleft1:Gowolfleft = new Gowolfleft();
addChild(gowolfleft1);
gowolfleft1.x = 100
gowolfleft1.y = 100
var speed = 30;  
gowolf1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);
gowolfleft1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);
stopwolf1.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed);
   stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed);
function fl_MoveInDirectionOfKey(event:Event)
 {
    if (leftPressed) //если нажата только(!) левая клавиша - шагаем влево
    {
        
       gowolfleft1.x -= speed;
       removeChild(stopwolf1);
    }
    else if (rightPressed) //если нажата только(!) правая клавиша - шагаем вправо
    {
       gowolf1.x += speed;
       removeChild(stopwolf1);
    }
    else // если не нажата ни одна из клавиш или нажаты обе одновременно - стоим
    {
       stopwolf1.gotoAndStop (1);
       removeChild(gowolf1);
    }
 }

   function fl_SetKeyPressed(event:KeyboardEvent):void
   {
      switch (event.keyCode)
      {
         case Keyboard.LEFT:
         {
            leftPressed = true;
            break;
         }
         case Keyboard.RIGHT:
         {
            rightPressed = true;
            break;
         }
      }
   }

   function fl_UnsetKeyPressed(event:KeyboardEvent):void
   {
      switch (event.keyCode)
      {
         case Keyboard.LEFT:
         {
            leftPressed = false;
            break;
         }
         case Keyboard.RIGHT:
         {
            rightPressed = false;
            break;
         }
      }
   }


При нажатии клавиш на сцене остаётся стоять только волк в спокойном состоянии а те двое исчезают. АааааАА что делать!?!?! 
PM MAIL   Вверх
SoWa
Дата 6.3.2014, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004
Где: Екатеринбург

Репутация: 1
Всего: 74



Чтобы не мучиться с постоянными добавлениями/удалениями символов на сцену я рекомендую создать MovieClip размером с волка, добавить в него обоих волков(стоящего и идущего), а потом управлять их видимостью (visible = true/false). И соответственно двигать MovieClip, в котором эти волки находятся.


--------------------
Всем добра smile
PM MAIL ICQ Skype   Вверх
tihomir
  Дата 18.3.2014, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.2.2014

Репутация: нет
Всего: нет



Объединил я их в один клип как вы и советовали:

Код

import flash.events.Event;

var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var wolf:Wo2 = new Wo2();
addChild(wolf);
wolf.x = stage ? stage.stageWidth / 2 : 400;
wolf.y = 100;
wolf.gotoAndPlay("st");

var speed:Number = 20;  
stage.addEventListener(KeyboardEvent.KEY_DOWN, go);
stage.addEventListener(KeyboardEvent.KEY_UP, st);
stage.addEventListener(Event.ENTER_FRAME, handlerEnterFrame);

function st(e:KeyboardEvent):void // функция отпущеных клавиш
{
    if (e.keyCode == Keyboard.LEFT ||e.keyCode == Keyboard.RIGHT)
    {
            wolf.gotoAndPlay("st");
            leftPressed = rightPressed = false;
    }
}    

function go(e:KeyboardEvent):void      
{
    if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево
    {
        if(!leftPressed)
        {
            leftPressed = true;
            wolf.scaleX = -1;
            wolf.gotoAndPlay("go");
        }
    }
    if (e.keyCode==Keyboard.RIGHT)
    {
        if(!rightPressed)
        {
            rightPressed = true;
            wolf.scaleX = 1;
            wolf.gotoAndPlay("go");
        }
    }
}

function handlerEnterFrame(event:Event):void
{
    if (leftPressed) wolf.x -= speed;
    if (rightPressed) wolf.x += speed;
}



Но вот при запуске сразу начинает проигрываться анимация ходьбы, а волк в спокойном состоянии вообще не появляется.
PM MAIL   Вверх
tihomir
  Дата 18.3.2014, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.2.2014

Репутация: нет
Всего: нет



У меня глутый вопрос) Как указать видимость части клипа. Допустим во этой ("go")?
PM MAIL   Вверх
f3hler
Дата 22.10.2014, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.10.2014

Репутация: нет
Всего: нет



из постов выше не сильно понятно как устроен ваш мувиклип персонажа.
толи вы разделили анимацию по кадрам gotoAndPlay(1)
толи вы разграничили анимацию метками gotoAndPlay('go')
PM MAIL   Вверх
Google
  Дата 23.11.2017, 03:05 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0732 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.