0

我正在构建一个简单的太空射击游戏

使用Tweener类我写了一个代码,从英雄飞船当前位置发射子弹到鼠标当前位置

var fire = new Bullet();
        addChild(fire);
        fire.x = ship.x + (ship.width * 0.5);
        fire.y = ship.y
        Tweener.addTween(fire, {x:_me.currentTarget.mouseX, y:_me.currentTarget.mouseY, time: 5} );

问题是这段代码使子弹停在最后一个鼠标位置,我希望子弹继续朝同一个方向移动,直到它离开舞台。

从理论上讲,最简单的方法是输入鼠标的 xy 位置,就好像它处于相同的角度但在舞台之外但是我怎样才能得到那些 x,y 坐标?

4

2 回答 2

1

determine the angle of the bullet. using the angle, consider the origin of the bullet the center of a circle and the first point as a coordinate at the edge of the circle.

for the bullet to follow the same path, its just a larger circle, so the radius will increase.

the angle will be the same and so will the origin.

于 2013-06-18T13:11:54.200 回答
0

我想你想要的是找到一个与 (fire.x, fire.y) , (_me.currentTarget.mouseX, _me.currentTarget.mouseY) 相同的直线的点。该点的 x 将是舞台宽度。

所以假设目标点是 A(stage.width, targetY)

我们得到

(targetY - mouseY)/(targetX - mouseX) = (mouseY - fire.y)/(mouseX - fire.x)

所以

targetY = (mouseY - fire.y)/(mouseX - fire.x)*(targetX - mouseX) + mouseY;

英雄 mouseX 是 _me.currentTarget.mouseX,mouseY 是 _me.currentTarget.mouseY

你可以设置 targetX = stage.width + 10,然后 targetY

所以你可以得到targetY,然后再做一个补间

Tweener.addTween(fire, {x:targetX, y:targetY, time: 5});

于 2013-06-18T14:57:54.100 回答