所以我正在尝试使用flashpunk在AS3中制作一个基本的互动宠物游戏,因为它能够使用精灵表。我已经动画了(闲置和行走)并移动了“宠物”,但我遇到了一个问题。
使用我当前的系统,我必须按住单击以继续将宠物移向鼠标,但是我希望它在我点击时移动到鼠标所在的位置而不是将其按住。
这是我的代码(检查鼠标是否被释放部分只是为了它可以停止动画):
override public function update():void
{
trace(FP.angle(sprRocket.x, sprRocket.y, FP.world.mouseX, FP.world.mouseY))
if (Input.mouseDown)
{
move(FP.world.mouseX, FP.world.mouseY)
Moving = true
}
if (Input.mouseReleased)
{
Moving = false
}
if(Moving && FP.angle(sprRocket.x, sprRocket.y, FP.world.mouseX, FP.world.mouseY) < 130 && FP.angle(sprRocket.x, sprRocket.y, FP.world.mouseX, FP.world.mouseY) > 20)
{
sprRocket.play("WalkU")
}
if (Moving && FP.angle(sprRocket.x, sprRocket.y, FP.world.mouseX, FP.world.mouseY) < 350 && FP.angle(sprRocket.x, sprRocket.y, FP.world.mouseX, FP.world.mouseY) > 225)
{
sprRocket.play("WalkD")
}
if (!Moving)
{
sprRocket.play("Idle")
}
//if (FP.angle(sprRocket.x, sprRocket.y, FP.world.mouseX, FP.world.mouseY) < 130 && FP.angle(sprRocket.x, sprRocket.y, FP.world.mouseX, FP.world.mouseY) > 20)
//{
//sprRocket.play("WalkU")
//}
//else
//{
//sprRocket.play("IdleD")
//}
}
public function move(x:int,y:int):void
{
var angle:int = FP.angle(sprRocket.x, sprRocket.y, x, y)
sprRocket.x += 100 * Math.cos(angle * FP.RAD) * FP.elapsed
sprRocket.y += 100 * Math.sin(angle * FP.RAD) * FP.elapsed
trace(angle)
}
答案 0 :(得分:0)
我使用了补间系统内置的flashpunks。
我还需要通过使用速度三角形公式(时间=距离/速度)并使用内置距离的flashpunk来保持恒定速度而不是总持续时间(关闭点为10秒,这是非常缓慢)计算器(FP.distance(x1,y1,x2,y2))
感谢您的帮助!