我目前在android上制作太空射击游戏(A.K.A:Hell Bullet)。所以我为独立使用Move和Fire的2个游戏杆做了一个基类。现在我的代码工作,如果我只移动一个,但不是同时。所以我做了一些研究并发现了多点触控,我尝试了一些东西,没有任何工作正确。多个虚拟游戏杆在As3中同时使用
任何人都知道为什么?
Joystick.as(带的MouseEvent,在一次工作之一):
package LP {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class Joystick extends MovieClip {
private var _startX: Number = 0;
private var _startY: Number = 0;
private var _tension: Number = 0.3;
private var _xSpeed: Number = 0;
public var _isDragging: Boolean = false;
public var _angle: int;
private var _radius: int;
public var _amplitudeX: Number;
public var _amplitudeY: Number;
public function Joystick() {
this.addEventListener(Event.ADDED_TO_STAGE, stageInit);
}
private function stageInit(e: Event): void {
this.removeEventListener(Event.ADDED_TO_STAGE, stageInit);
_startX = x;
_startY = y;
_radius = background.width/2
addEventListener(MouseEvent.MOUSE_DOWN, on_mouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, on_mouseUp);
stage.addEventListener(Event.ENTER_FRAME, on_enterFrame);
}
protected function on_mouseDown(e: MouseEvent): void {
_isDragging = true;
}
protected function on_mouseUp(e: MouseEvent): void {
_isDragging = false;
}
protected function on_enterFrame(e: Event): void {
if (_isDragging) {
_angle = Math.atan2(root.mouseY - _startY, root.mouseX - _startX)/(Math.PI/180);
rotation = _angle;
stick.rotation = -_angle;
stick.x = mouseX;
if (stick.x > _radius) {
stick.x = _radius;
}
} else {
_xSpeed = -stick.x * _tension;
stick.x += _xSpeed;
}
_amplitudeY = Math.sin(_angle * (Math.PI/180)) * (stick.x/8);
_amplitudeX = Math.cos(_angle * (Math.PI/180)) * (stick.x/8);
}
}
}
这是我尝试用MultitouchInputMode.GESTURE(不工作,什么都没有发生,没有错误)
package LP {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TouchEvent;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
public class Joystick extends MovieClip {
Multitouch.inputMode = MultitouchInputMode.GESTURE;
private var _startX: Number = 0;
private var _startY: Number = 0;
private var _tension: Number = 0.3;
private var _xSpeed: Number = 0;
public var _isDragging: Boolean = false;
public var _angle: int;
private var _radius: int;
public var _amplitudeX: Number;
public var _amplitudeY: Number;
public function Joystick() {
this.addEventListener(Event.ADDED_TO_STAGE, stageInit);
}
private function stageInit(e: Event): void {
this.removeEventListener(Event.ADDED_TO_STAGE, stageInit);
_startX = x;
_startY = y;
_radius = background.width/2
addEventListener(TouchEvent.TOUCH_BEGIN, on_Touch);
stage.addEventListener(TouchEvent.TOUCH_END, on_TouchEnd);
stage.addEventListener(Event.ENTER_FRAME, on_enterFrame);
}
protected function on_Touch(e: TouchEvent): void {
_isDragging = true;
}
protected function on_TouchEnd(e: TouchEvent): void {
_isDragging = false;
}
protected function on_enterFrame(e: Event): void {
if (_isDragging) {
_angle = Math.atan2(root.mouseY - _startY, root.mouseX - _startX)/(Math.PI/180);
rotation = _angle;
stick.rotation = -_angle;
stick.x = mouseX;
if (stick.x > _radius) {
stick.x = _radius;
}
} else {
_xSpeed = -stick.x * _tension;
stick.x += _xSpeed;
}
_amplitudeY = Math.sin(_angle * (Math.PI/180)) * (stick.x/8);
_amplitudeX = Math.cos(_angle * (Math.PI/180)) * (stick.x/8);
}
}
}
使用TOUCH_POINT而不是GESTURE正是我所要做的,谢谢! 现在我必须弄清楚如何替换root.mouseX和root.mouseY,因为当我使用这两个游戏杆时,这会导致冲突,因为它们都使用相同的coordonate。 – Draknars
e.stageX和e.stageY可能对你很有用。 –