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


 




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


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

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