Показать сообщение отдельно
Старый 12.05.2010, 23:34
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Прибавлять к координате не постоянное число (у Вас 5), а переменную (ее обычно называют speed или step - смысл понятен). Эту переменную обнулять при отпускании клавиши (остановке танка), а вобработчике ентерФрейм, прежде чем ее прибавить к координате - увеличивать на 0.1 (подберете) и проверять, не стала ли больше номинальной "скорости"
Код AS1/AS2:
speed = Math.min(speed + 0.1, 5);
this.x += speed;
Добавлено через 1 час 5 минут
Типа так (спрайт на мувиклип поменяйте сами))
Код AS3:
package {
	import flash.display.*;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
 
	public class Tank extends Sprite 
	{
		private var moveFlag:Boolean=false;
		private var move:String;
		private var _speedX:Number = 0;
		private var _speedY:Number = 0;
		////
		public function Tank() 
		{
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private function init(event:Event):void
		{
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
		}
		////
		function onKey(e:KeyboardEvent):void 
		{
			trace(e.keyCode + " x=" + this.x + " y=" + this.y);
			if (! moveFlag) 
			{
				_speedX = _speedY = 0.25;
				moveFlag=true;
				if (e.keyCode==37) {
					move="left";
				} else if (e.keyCode == 39) {
					move="right";
				} else if (e.keyCode == 38) {
					move="up";
				} else if (e.keyCode == 40) {
					move="down";
				}
				this.addEventListener(Event.ENTER_FRAME, handler_enterFrame);
				stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
			}
		}
		function handler_enterFrame(e:Event):void 
		{ /*в этой функции представлены условия движения в стороны*/
			if (move==="left") {
				this.rotation=270;
				_speedX = Math.min(5, _speedX * 1.1);
				this.x-=_speedX;
			} else if (move === "right") {
				_speedX = Math.min(5, _speedX * 1.1);
				this.rotation=90;
				this.x+=_speedX;
			} else if (move === "up") {
				_speedY = Math.min(5, _speedY * 1.1);
				this.rotation=0;
				this.y-=_speedY;
			} else if (move === "down") {
				_speedY = Math.min(5, _speedY * 1.1);
				this.rotation=180;
				this.y+=_speedY;
			}
		}
 
		private function onKeyUp(e:KeyboardEvent):void 
		{
			stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyUp);
			this.removeEventListener(Event.ENTER_FRAME, handler_enterFrame);
			moveFlag=false;
		}
	}
}
__________________
Reality.getBounds(this);