Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.02.2014, 09:55
tihomir вне форума Посмотреть профиль Отправить личное сообщение для tihomir Найти все сообщения от tihomir
  № 31  
Ответить с цитированием
tihomir

Регистрация: Feb 2014
Сообщений: 30
Попробовал я сделать так:
Код AS1/AS2:
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;
         }
      }
   }
Все объекты появляются на сцене при запуске и исчезают когда нажимаю клавиши. Что делать!?!?)

Старый 27.02.2014, 11:29
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 32  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
stopwolf1.visible = true;
gowolf1.visible = false;
gowolfleft1.visible = false;
function fl_MoveInDirectionOfKey(event:Event):void
{
	if (leftPressed) //если нажата только(!) левая клавиша - шагаем влево
	{
		if (rightPressed) // если нажаты обе одновременно - стоим
		{
			stopwolf1.visible = true;
			gowolf1.visible = false;
			gowolfleft1.visible = false;
			return; // прекращаем выполнение функции
		}
		gowolfleft1.x -= speed;
		gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = false;
		gowolfleft1.visible = true;
	}
	else if (rightPressed) //если нажата только(!) правая клавиша - шагаем вправо
	{
		gowolf1.x += speed;
		gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = true;
		gowolfleft1.visible = false;
	}
	else // если не нажата ни одна из клавиш - стоим
	{
		stopwolf1.visible = true;
		gowolf1.visible = false;
		gowolfleft1.visible = false;		
	}
}
__________________
Reality.getBounds(this);

Старый 27.02.2014, 11:46
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 33  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Wolsh, что-то ты с дублированием и вложенностью переборщил =)
Код AS3:
function fl_MoveInDirectionOfKey(event:Event):void {
	if ((leftPressed && rightPressed) || !(leftPressed && rightPressed)) {
		stopwolf1.visible = true;
		gowolf1.visible = false;
		gowolfleft1.visible = false;
	}
	else if (leftPressed) {
		gowolfleft1.x -= speed;
		gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = false;
		gowolfleft1.visible = true;
	}
	else {
		gowolf1.x += speed;
		gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = true;
		gowolfleft1.visible = false;
	}
}
Плюс 30 для скорости, все же, многовато. И быть может Вы прислушаетесь к моему совету с объединением всех клипов анимации в один клип? Избавитесь от "смещаем все клипы вместе" и постоянной видимости-развидимости отдельных клипов. Кроме того, при переходе по кадрам, флеш автоматически удаляет ненужные уже клипы, что были в предыдущих кадрах. А у вас каждая анимация всегда на экране и проигрывается, хоть и скрыта.
__________________
тут я

Старый 27.02.2014, 13:12
tihomir вне форума Посмотреть профиль Отправить личное сообщение для tihomir Найти все сообщения от tihomir
  № 34  
Ответить с цитированием
tihomir

Регистрация: Feb 2014
Сообщений: 30
И первый и второй вариант ошибок не выдаёт но чего то не реагирует на нажатие никак

Код:
Код AS3:
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):void {
	if ((leftPressed && rightPressed) || !(leftPressed && rightPressed)) 
	{
		stopwolf1.visible = true;
		gowolf1.visible = false;
		gowolfleft1.visible = false;
	}
	else if (leftPressed) {
		gowolfleft1.x -= speed;
		gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = false;
		gowolfleft1.visible = true;
	}
	else {
		gowolf1.x += speed;
		gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = true;
		gowolfleft1.visible = false;
	}
}
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;
          }
	   }
	}

Старый 27.02.2014, 13:39
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 35  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
С чего бы им реагировать, если при любом раскладе сработает только первый блок.
КорДум, моя то цель была помочь человеку понять логику. А то что ты написал... "если true или false стоим, а иначе двигаемся". Ну.. не знаю, надо подумать...
__________________
Reality.getBounds(this);

Старый 27.02.2014, 15:03
tihomir вне форума Посмотреть профиль Отправить личное сообщение для tihomir Найти все сообщения от tihomir
  № 36  
Ответить с цитированием
tihomir

Регистрация: Feb 2014
Сообщений: 30
Попробовал так:
Код AS3:
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;  
stage.addEventListener(KeyboardEvent.KEY_DOWN, go);  
function go(e:KeyboardEvent):void {      
if (e.keyCode==Keyboard.LEFT) {           
		gowolfleft1.x -= speed;
		gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = false;
		gowolfleft1.visible = true;
	}
if (e.keyCode==Keyboard.RIGHT) {           
gowolf1.x += speed;
gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе
stopwolf1.visible = false; // устанавливаем видимость клипов
gowolf1.visible = true;
gowolfleft1.visible = false;
}
else // если не нажата ни одна из клавиш - стоим
	{
		stopwolf1.visible = true;
		gowolf1.visible = false;
		gowolfleft1.visible = false
	}
}
Он зашевелился, но при запуске на сцене появляются все 3 объекта, и при движении влево движется stopwolf а не gowolfleft при движении вправо он шагает но при отпускании клавиш символ stopwolf не выводится, остаётся gowolf.

Добавлено через 17 часов 19 минут
Вот:
Код AS3:
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
gowolf1.visible = false;
var gowolfleft1:Gowolfleft = new Gowolfleft();
addChild(gowolfleft1);
gowolfleft1.x = 100
gowolfleft1.y = 100
gowolfleft1.visible = false;
var speed = 30;  
stage.addEventListener(KeyboardEvent.KEY_DOWN, go);  
function go(e:KeyboardEvent):void {      
{
	if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево
	{
		gowolfleft1.x -= speed;
		gowolf1.x = stopwolf1.x = gowolfleft1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = false;
		gowolfleft1.visible = true;
		return;
	}
	else if (e.keyCode==Keyboard.RIGHT)
	{
		gowolf1.x += speed;
		gowolfleft1.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		gowolf1.visible = true;
		gowolfleft1.visible = false;
		return;
	}
 
	else // если не нажата ни одна из клавиш - стоим
	{
		stopwolf1.visible = true;
		gowolf1.visible = false;
		gowolfleft1.visible = false;		
	}
}
}
Он зашагал и даже как надо, но при отпускании клавиш остаётся символ gowolf или gowolfleft а по идее надо stopwolf чтобы появлялся

Добавлено через 23 часа 18 минут
Ура Ура! ) Почти победил! Но вот только он шагать начинает как то странно, как бы с пробуксовкой, нажимаю например влево появляется символ gowolfleft, но передвигаться начинает он спустя примерно секунду, как это можно победить?

Вот код:
Код AS3:
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var stopwolf1:Stopwolf = new Stopwolf();
addChild(stopwolf1);
stopwolf1.x = 100
stopwolf1.y = 100
var stopwolf2:Stopwolf = new Stopwolf();
addChild(stopwolf2);
stopwolf2.x = 100
stopwolf2.y = 100
stopwolf2.scaleX = -1; // стоящий волк отражен по горизонтали
stopwolf2.visible = false; // устанавливаем видимость клипов
var gowolf1:Gowolf = new Gowolf();
addChild(gowolf1);
gowolf1.x = 100
gowolf1.y = 100
gowolf1.visible = false; // устанавливаем видимость клипов
var gowolfleft1:Gowolf = new Gowolf();
addChild(gowolfleft1);
gowolfleft1.x = 100
gowolfleft1.y = 100
gowolfleft1.visible = false; // устанавливаем видимость клипов
gowolfleft1.scaleX = -1; // идущий волк вправо отражен по горизонтали
var speed = 30;  
stage.addEventListener(KeyboardEvent.KEY_DOWN, go);
stage.addEventListener(KeyboardEvent.KEY_UP, st);
 function st(e:KeyboardEvent):void // функция отпущеных клавиш
 {
        if (e.keyCode == Keyboard.LEFT)
        {
        stopwolf2.visible = true;
		gowolf1.visible = false;
		gowolfleft1.visible = false;		
        }
		 else if (e.keyCode == Keyboard.RIGHT)
		 {
        stopwolf1.visible = true;
		gowolf1.visible = false;
		gowolfleft1.visible = false;		
        }
 }
function go(e:KeyboardEvent):void {      
{
	if (e.keyCode==Keyboard.LEFT) //если нажата только(!) левая клавиша - шагаем влево
	{
		gowolfleft1.x -= speed;
		gowolf1.x = stopwolf1.x = stopwolf2.x = gowolfleft1.x; // смещаем все клипы вместе
		stopwolf2.visible = false; // устанавливаем видимость клипов
		stopwolf1.visible = false; 
		gowolf1.visible = false;
		gowolfleft1.visible = true;
		return;
	}
	else if (e.keyCode==Keyboard.RIGHT)
	{
		gowolf1.x += speed;
		gowolfleft1.x = stopwolf2.x = stopwolf1.x = gowolf1.x; // смещаем все клипы вместе
		stopwolf1.visible = false; // устанавливаем видимость клипов
		stopwolf2.visible = false;
		gowolf1.visible = true;
		gowolfleft1.visible = false;
		return;
	}
 
	}
}


Последний раз редактировалось tihomir; 28.02.2014 в 14:22.
Старый 14.03.2014, 15:50
tihomir вне форума Посмотреть профиль Отправить личное сообщение для tihomir Найти все сообщения от tihomir
  № 37  
Ответить с цитированием
tihomir

Регистрация: Feb 2014
Сообщений: 30
Хотелось бы узнать) всё таки как то можно "пробуксовку" убрать?)

Старый 14.03.2014, 16:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 38  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Зачем Вам столько скобок?
2. Зачем Вам else, Вы думаете e.keyCode может быть одновременно и LEFT и RIGHT?
3. В коде нет пробуксовки. Правда, понять код уже решительно невозможно из-за удручающих названий переменных и абсолютного непонимания сколько там у Вас клипов и кто за что отвечает. Дайте нормальные имена без непонятных цифр и уберите из кода лишнее.

Добавлено через 4 часа 19 минут
Пробуксовка получается, потому что движение происходит только на событие нажатия клавиши.
Клавиатуры устроены так, что когда вы нажимаете клавишу, посылается событие. Затем полсекунды тишины, и если вы не отпустили клавиши, клавиатура начинает генерить событие нажатия этой клавиши с какой-то своей частотой. Это то, чем все мы пользуемся чтобы печатать линию -----------------------------------. Попробуйте и увидите свою "пробуксовку". Строго по вашему коду объект должен двигаться только тогда, когда пользователь нажал клавишу. Один раз на 30 пикселей. Нажал еще раз — еще 30 пикселей.
__________________
Reality.getBounds(this);

Старый 14.03.2014, 20:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 39  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Надо вешать движение на ентерфрейм. Вспомните, зачем у вас до сих пор болтаются два флага leftPressed и rightPressed?

goWolf.swf   (3.4 Кб)
Вложения
Тип файла: zip goWolf.zip (12.3 Кб, 81 просмотров)
Тип файла: swf goWolf.swf (3.4 Кб, 181 просмотров)
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:00.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.