Andengine - 在旋转枪前射击子弹

时间:2014-03-13 18:46:43

标签: android andengine

您好我在论坛中搜索过,但是没有找到有用的答案。 我正在和AndEngine一起玩游戏,我在旋转精灵的拍摄中被困了3天。

这是我的代码以及我如何旋转枪。我在这里尝试射击子弹,但是从一个错误的起点射出我想从枪尾射出子弹。

@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {

    if(pSceneTouchEvent.isActionMove()){
          final float dX = pSceneTouchEvent.getX() - machine.getX();
          final float dY = pSceneTouchEvent.getY() - machine.getY();

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

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

        machine.setRotation(rotation - 90);

        Log.d("BUG",machine.getRotation() + "");
        if(machine.getRotation() >= 84  ){
            machine.setRotation(84);

        }
        if(machine.getRotation() <= -54 ){
            machine.setRotation(-54);


        }

        final int incrementXValue = 15;
        long sElapsed = System.currentTimeMillis() - lastFire;

        if(bulletsAmout > 0 && sElapsed > cooldownBetweenShoot * cdModd){

             e = new Entity(0,machine.getY());
             e.setRotation(getRotation());

             SceneManager.getInstance().getCurrentScene().attachChild(e);


                float x2 =  (float) (machine.getSceneCenterCoordinates()[0] + machine.getWidth() /2 * Math.cos(machine.getRotation()));
                float y2 = (float) (machine.getSceneCenterCoordinates()[1]  + machine.getWidth() /2 * Math.sin(machine.getRotation()));

                float realX = (float) (Math.toRadians(x2) + machine.getWidth());
                 realY = (float) Math.toRadians(y2);


            bullets = new Sprite(realX,realY, resourcesManager.bulletRegion.deepCopy(), vbom){
                protected void onManagedUpdate(float pSecondsElapsed) {
                    float currentX = this.getX();
                    this.setX(currentX + incrementXValue);
                    super.onManagedUpdate(pSecondsElapsed);

                }
            };
            bullets.setScale(0.06f);


            e.attachChild(bullets);
            projectilesToBeAdded.add(bullets);
            bulletsAmout--;
            lastFire = System.currentTimeMillis();
            setBulletsText(bulletsAmout);
            resourcesManager.pistolSound.play();


        }

        return true;
    }


    return false;

}

2 个答案:

答案 0 :(得分:0)

假设您使用的是GLES2-AnchorCenter:

  1. 您可以通过调用gun.convertLocalToSceneCoordinates(gunMuzzleX, gunMuzzleY)将子弹设置到您可以获得的枪尾的位置来定位子弹。

  2. 然后将子弹旋转设置为枪的旋转。

  3. 对子弹施加速度。计算速度向量,如下FloatMath.sin(rotationOfBulletInRadians) * speedFloatMath.cos(rotationOfBulletInRadians) * speed请注意,您必须将以弧度为单位的旋转传递给sin和cos函数,而不是度数!

答案 1 :(得分:0)

所以我找到了解决方法。

问题在于这行代码:

   
    e = new Entity(0,machine.getY());

应该是:

     e = new Entity(machine.getX() - (machine.getHeight() / 2),machine.getY())