0
我已經寫了一些代碼開始我的遊戲,我現在想要更改控件從鼠標到觸摸事件,所以我可以在我的ipad上使用它。將AS3代碼從鼠標轉換爲ios觸摸事件
下面的代碼是多遠我有,但我可以不知道如何去改變它與觸摸工作,並拖動
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TouchEvent;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.Joints.*;
public class Main extends Sprite {
private var world:b2World;
private var worldScale:Number = 30;
private var mouseJoint:b2MouseJoint;
Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;
var myBlock:Array = new Array(
new Block(),
new Block(),
new Block()
);
public function Main() {
addChild(myBlock[0]);
addChild(myBlock[1]);
addChild(myBlock[2]);
world = new b2World(new b2Vec2(0,9.81),true);
debugDraw();
var bodyDef:b2BodyDef=new b2BodyDef();
bodyDef.position.Set(320/worldScale,470/worldScale);
var polygonShape:b2PolygonShape=new b2PolygonShape();
polygonShape.SetAsBox(320/worldScale,10/worldScale);
var fixtureDef:b2FixtureDef=new b2FixtureDef();
fixtureDef.friction = 1;
fixtureDef.restitution = 0.5;
fixtureDef.shape = polygonShape;
var groundBody:b2Body = world.CreateBody(bodyDef);
groundBody.CreateFixture(fixtureDef);
for (var i:int=0; i<3; i++) {
createBox(Math.random()*500+70,400,b2Body.b2_dynamicBody);
var targetBox:TargetBox=new TargetBox();
addChild(targetBox);
targetBox.x = 220 + i * 100;
targetBox.y = 180;
}
addEventListener(Event.ENTER_FRAME,updateWorld);
stage.addEventListener(TouchEvent.TOUCH_BEGIN, createJoint);
}
private function createBox(pX:Number,pY:Number,type:int):void {
var bodyDef:b2BodyDef=new b2BodyDef();
bodyDef.position.Set(pX/worldScale,pY/worldScale);
bodyDef.type = type;
var polygonShape:b2PolygonShape=new b2PolygonShape();
polygonShape.SetAsBox(30/worldScale,30/worldScale);
var fixtureDef:b2FixtureDef=new b2FixtureDef();
fixtureDef.shape = polygonShape;
fixtureDef.density = 1;
fixtureDef.friction = 0.5;
fixtureDef.restitution = 0.2;
var box:b2Body = world.CreateBody(bodyDef);
box.CreateFixture(fixtureDef);
}
private function createJoint(e:TouchEvent):void {
world.QueryPoint(queryCallback,mouseToWorld());
}
private function queryCallback(fixture:b2Fixture):Boolean {
var touchedBody:b2Body = fixture.GetBody();
if (touchedBody.GetType() == b2Body.b2_dynamicBody) {
var jointDef:b2MouseJointDef=new b2MouseJointDef();
jointDef.bodyA = world.GetGroundBody();
jointDef.bodyB = touchedBody;
jointDef.target = mouseToWorld();
jointDef.maxForce = 1000 * touchedBody.GetMass();
mouseJoint = world.CreateJoint(jointDef) as b2MouseJoint;
stage.addEventListener(TouchEvent.TOUCH_MOVE, moveJoint);
stage.addEventListener(TouchEvent.TOUCH_END, finish);
stage.addEventListener(TouchEvent.TOUCH_END,killJoint);
}
return false;
}
private function moveJoint(e:TouchEvent):void {
mouseJoint.SetTarget(mouseToWorld());
}
private function killJoint(e:TouchEvent):void {
world.DestroyJoint(mouseJoint);
mouseJoint = null;
stage.removeEventListener(TouchEvent.TOUCH_MOVE,moveJoint);
stage.removeEventListener(TouchEvent.TOUCH_END,killJoint);
stage.removeEventListener(TouchEvent.TOUCH_END,finish);
}
private function mouseToWorld():b2Vec2 {
return new b2Vec2(mouseX/worldScale,mouseY/worldScale);
}
private function debugDraw():void {
var debugDraw:b2DebugDraw=new b2DebugDraw();
var debugSprite:Sprite=new Sprite();
addChild(debugSprite);
debugDraw.SetSprite(debugSprite);
debugDraw.SetDrawScale(worldScale);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit|b2DebugDraw.e_jointBit);
debugDraw.SetFillAlpha(0.5);
world.SetDebugDraw(debugDraw);
}
private function finish(e:TouchEvent):void {
for (var b:b2Body=world.GetBodyList(); b; b=b.GetNext()) {
for (var i:int=0; i<3; i++) {
var distX:Number = b.GetPosition().x * worldScale - (220 + i * 100);
var distY:Number = b.GetPosition().y * worldScale - 180;
if (distX*distX+distY*distY<900 && b.GetType()==b2Body.b2_dynamicBody) {
world.DestroyBody(b);
createBox(220 + i * 100,180,b2Body.b2_staticBody);
}
}
}
}
private function updateWorld(e:Event):void {
world.Step(1/30,10,10);
world.ClearForces();
var m=0;
for (var b:b2Body=world.GetBodyList(); b; b=b.GetNext()) {
if (m==3) {m=0;}
var distX:Number = b.GetPosition().x * worldScale - (220 + m * 100);
var distY:Number = b.GetPosition().y * worldScale - 180;
if (b.GetType()==b2Body.b2_dynamicBody) {
myBlock[m].x = distX + (220 + m * 100);
myBlock[m].y = distY + 180;
myBlock[m].rotation = b.GetAngle() * 180/Math.PI;
}
m++
}
world.DrawDebugData();
}
}
}
你需要更具體,它怎麼不工作?你有錯誤嗎? – BadFeelingAboutThis
除了@LondonDrugs_MediaServices問題,我會建議看看,如果你真的需要觸摸而不是鼠標。觸摸鼠標事件在iPad和其他設備上觸發就很好,並且具有在非觸摸平臺上也能正常工作的優點。觸摸事件給你帶來的唯一好處是它們提供了多點觸控支持,但這並不是很多時候需要的。 –