您好我在论坛中搜索过,但是没有找到有用的答案。 我正在和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;
}
答案 0 :(得分:0)
假设您使用的是GLES2-AnchorCenter:
您可以通过调用gun.convertLocalToSceneCoordinates(gunMuzzleX, gunMuzzleY)
将子弹设置到您可以获得的枪尾的位置来定位子弹。
然后将子弹旋转设置为枪的旋转。
对子弹施加速度。计算速度向量,如下FloatMath.sin(rotationOfBulletInRadians) * speed
和FloatMath.cos(rotationOfBulletInRadians) * speed
。
请注意,您必须将以弧度为单位的旋转传递给sin和cos函数,而不是度数!
答案 1 :(得分:0)
所以我找到了解决方法。
问题在于这行代码:
e = new Entity(0,machine.getY());
应该是:
e = new Entity(machine.getX() - (machine.getHeight() / 2),machine.getY())