我的游戏场景包括四个静止的墙体和一个平台板,它是运动类型并且只能水平滑动,如下图所示。
平台主体基于加速度传感器移动,请参阅此代码
@Override
public void onAccelerationChanged(AccelerationData pAccelerationData) {
mPlatformBody.setLinearVelocity(pAccelerationData.getX() * 10, 0);
}
我的问题是当平台离开边界墙时,它不应该。为了解决这个问题,我试图打破边界时将其速度设置为零。看到这个代码
Rectangle rect = new Rectangle(camWidth / 2 - 40, camHeight / 2 - 5,
80, 10, mEngine.getVertexBufferObjectManager()) {
@Override
protected void onManagedUpdate(float pSecondsElapsed) {
if (this.getX() <= 1) {
mPlatformBody.setLinearVelocity(0, 0);
}
if ((this.getX() + 80 >= camWidth - 1)) {
mPlatformBody.setLinearVelocity(0, 0);
}
super.onManagedUpdate(pSecondsElapsed);
}
};
使用上面的代码,仍然此平台可以离开屏幕。
有谁可以帮助我如何克服这个问题?
答案 0 :(得分:0)
正如@ LearnCocos2D所述,我应该在尝试离开屏幕时将平台主体重置为合法位置。为此,我应该使用setTransform
类Body
方法(如@ iforce2d所述)。
处理setTransform
时,有两个要点。
示例:假设我们要将body body 移动到(3,4)点(以像素为单位)。
float x = 3; // in pixels (AndEngine unit)
float y = 4; // in pixels (AndEngine unit)
float wD2 = sprite.getWidth() / 2;
float hD2 = sprite.getHeight() / 2;
float angle = body.getAngle(); // preserve original angle
body.setTransform((x + wD2) / PIXEL_TO_METER_RATIO_DEFAULT,
(y + hD2) / PIXEL_TO_METER_RATIO_DEFAULT,
angle);
请注意PIXEL_TO_METER_RATIO_DEFAULT
为32。