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

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

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

Регистрация: May 2010
Сообщений: 2
По умолчанию Движение объекта происходит с ускорением. Почему?

Привет. Есть вопрос по движению.
У меня есть Symbol типа Movie Clip (player). Хочу чтобы он передвигался по нажатию клавиш.

Ниже код. Объект двигается, всё ОК. Но есть одна проблема: если зажать клавишу, некоторое время объект двигается нормально, а потом начинает ускоряться. Двигаться быстрее.

Собственно вопрос, кто-нибудь может объяснить, почему движение получается с ускорением, а не равномерное? Что-то не вкурю.

Код AS1/AS2:
package{
	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import flash.events.Event;
 
	public class Main extends MovieClip {
		var vx, vy:int;
 
 
		public function Main(){
			init();
			}
 
		public function init():void{
			vx = 0;
			vy = 0;
 
			//Add event listeners
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey_Down);
			stage.addEventListener(KeyboardEvent.KEY_UP, onKey_Up);
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			}
 
 
		function onKey_Down(event:KeyboardEvent):void{
			if(event.keyCode == 65 || event.keyCode == Keyboard.LEFT){
				vx -= 1;
				}
			if(event.keyCode == 68 || event.keyCode == Keyboard.RIGHT){
				vx += 1;
				}
			if(event.keyCode == 87 || event.keyCode == Keyboard.UP){
				vy -= 1;
				}
			if(event.keyCode == 83 || event.keyCode == Keyboard.DOWN){
				vy += 1;
				}
			}
		function onKey_Up(event:KeyboardEvent):void{
			if(event.keyCode == 65 || event.keyCode == 68 || event.keyCode == Keyboard.RIGHT || event.keyCode == Keyboard.LEFT){
				vx  = 0;
				}
			if(event.keyCode == 87 || event.keyCode == 83 || event.keyCode == Keyboard.UP || event.keyCode == Keyboard.DOWN){
				vy = 0;
				}
			}
		function onEnterFrame(event:Event){
			var playerHalfHeight:uint = player.height/2;
			var playerHalfWidth:uint = player.width/2;
 
			//Move player
			player.x += vx;
			player.y += vy;
 
			//Stop Player movement at the end of stage
			if(player.x - playerHalfWidth < 0){
				player.x = 0 + playerHalfWidth;
				}
			else if(player.x + playerHalfWidth > stage.stageWidth){
				player.x = stage.stageWidth - playerHalfWidth;
				}
			else if(player.y - playerHalfHeight < 0){
				player.y = 0 + playerHalfHeight;
				}
			else if(player.y + playerHalfHeight > stage.stageHeight){
				player.y = stage.stageHeight - playerHalfHeight;
				}
			}
		}
	}

Старый 25.05.2010, 22:47
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 2  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Я весь код не вкуривал, как Вы, но сразу бросается в глаза что-то похожее на ускорение:
Код AS3:
...
vx += 1;
...
player.x += vx;
...
т.е. скорее всего Вы прибавляете к координате инкрементную величину.

Добавлено через 3 минуты
попробуйте поставить вместо += и -= просто =

Старый 25.05.2010, 23:45
cugunder вне форума Посмотреть профиль Отправить личное сообщение для cugunder Найти все сообщения от cugunder
  № 3  
Ответить с цитированием
cugunder

Регистрация: May 2010
Сообщений: 2
Цитата:
Сообщение от enepx Посмотреть сообщение
Я весь код не вкуривал, как Вы, но сразу бросается в глаза что-то похожее на ускорение:
Код AS3:
...
vx += 1;
...
player.x += vx;
...
т.е. скорее всего Вы прибавляете к координате инкрементную величину.

Добавлено через 3 минуты
попробуйте поставить вместо += и -= просто =
ммм.. точно )) спасибо. из-за двойного инкремента ускорение было.


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

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

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


 


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


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