1

我正在使用 Andengine 制作游戏,但我在旋转精灵拍摄时被困了 2 天。我不是几何学的英雄,已经问过老师,但他也不能给我正确的答案。那么谁是数学英雄并帮助我:)。

问题是我无法弄清楚子弹必须在炮塔前产生的位置。旋转并找到子弹必须去的目的地是没有问题的。它只是关于生成点。

我为这个问题删除了很多不感兴趣的代码。

好的,这是炮塔旋转的旋转代码:

public class AlienShip extends Ship {

public static final float BASE_ROTATION_SPEED = 0.25f;
public static final int DEFAULT_IMAGE_ROTATION = 90; //90 degrees 



protected PlayerShip ship;


public AlienShip(float pX, float pY, TextureRegion pTextureRegion,
        VertexBufferObjectManager pVertexBufferObject,FixedStepPhysicsWorld pw, int baseDurability) {

    super(pX, pY, pTextureRegion, pVertexBufferObject, pw, baseDurability);
}

public void rotateToPlayer()
{
    if (ship != null) {

        float dX = this.getX() - ship.getX();
        float dY = this.getY() - ship.getY();

        float angle = (float) Math.atan2(-dY, dX);

        float rotation = MathUtils.radToDeg(angle) + DEFAULT_IMAGE_ROTATION;

        RotationModifier rotMod = new RotationModifier(BASE_ROTATION_SPEED, this.getRotation(), rotation);
        this.registerEntityModifier(rotMod);

    }

}

public void rotateToInitPos() {

    RotationModifier rotMod = new RotationModifier(BASE_ROTATION_SPEED, this.getRotation(), 0);
    this.registerEntityModifier(rotMod);
}
}

上面的代码工作正常。

这是船正在射击的激光代码。阅读评论以找出女巫部分不起作用。

public class GameScene extends Scene {

protected PlayerShip playerShip;



private SpawnCallback createShootCallback(boolean player) {

 return new SpawnCallback() {
            @Override
            public void spawn(SpawnTimer spawnTimer) {
                PhysicsSprite laser = null;
                AlienShip alienShip = (AlienShip) spawnTimer.getPhysicsSprite();


                    // laser = alienMissilePool.getMissileFromPool(x,y)
                    //spawn the laser in front of the rotating ship [Not working :( ]
                    laser = alienMissilePool.getMissileFromPool( ( alienShip.getX() * FloatMath.cos(MathUtils.degToRad(rotation)) - ((1280 - alienShip.getY() - alienShip.getY()/2) * FloatMath.sin(MathUtils.degToRad(rotation)) ) ) ,
                                                              ( alienShip.getX() * FloatMath.sin(MathUtils.degToRad(rotation)) + ((1280 - alienShip.getY() - alienShip.getY()/2) * FloatMath.cos(MathUtils.degToRad(rotation)) ) ) );

                    //Set the rotation from the laser same to the ship rotation [Is working perfectly].
                    float rotation = alienShip.getRotation();
                    laser.setRotation(rotation);

                    //Set laser speed and direction [Is working perfectly]
                    float pX = 0.01f * (playerShip.getX() - laser.getX());
                    float pY = 0.01f * (playerShip.getY() - laser.getY());

                    laser.getSpriteBody().setLinearVelocity(pX, pY);


                spawnPhysicsSprite(laser);
                }

        };
}

}

这是显示 x 轴和 y 轴值的绘图的链接。 http://s24.postimg.org/citz29339/gamescene.png

谢谢!

4

1 回答 1

0

与其学习数学,不如将一个物体(实体)放置在炮塔的位置上,并使用它的位置作为激光的生成点?

所以你的炮塔会在枪的位置附上一个实体。告诉我您是否需要示例代码

于 2013-11-24T13:20:45.993 回答