gpt4 book ai didi

android - 使用相机跟随 Sprite 时,我应该使用绑定(bind)相机(Andengine)吗?

转载 作者:行者123 更新时间:2023-11-29 17:54:57 25 4
gpt4 key购买 nike

我知道我可以使用 mCamera.setChaseEntity(mSprite) 来设置相机跟随我的 Sprite 。但在做我的研究时,我看到了使用绑定(bind)相机的建议。有什么区别/好处?

郑重声明,我有一些 Andengine 和 PhysicsBox2D 的开发经验,但我只在屏幕范围内工作过。本质上,我想要做的是让一个对象从屏幕的左侧开始。一旦它通过水平中心(它不是垂直对齐的),我需要相机开始跟随它,因为它向右移动通过世界的其余部分。

在我的第一次尝试中,我使用了一个处理程序来检查 Sprite 是否位于水平中心(误差为 5%)。然后我设置 mCamera.setChaseEntity(mSprite)。由于物体没有垂直居中,相机显然跳到了物体的中心。它以异常紧张的方式跟随它(研究让我相信相机无法处理物理引擎的速度并使用计时器来减慢它)。

就在那时,我看到了 Nicholas 推出的 Bound Camera 示例。这似乎正是我想要的,但是在实现它之后,我得到了一个非常拉伸(stretch)的世界图像,并且相机没有跟随 Sprite 超出屏幕边界。这是我使用的(通过水平中心时忽略中心相机):

public EngineOptions onCreateEngineOptions() {
// Initialize camera
mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
mBoundChaseCamera = new BoundCamera(0, 0, CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2);
mBoundChaseCamera.setCenter(CAMERA_WIDTH/2, CAMERA_HEIGHT/2);

// Create engine options
EngineOptions options = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH*2, CAMERA_HEIGHT), mCamera);

return options;
}

.....

@Override
public void onPopulateScene(Scene pScene,
OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {

// Create player sprite
sPlayer = new Sprite(0, 0, playerTR,getVertexBufferObjectManager());
sPlayer.setPosition(20, CAMERA_HEIGHT/2);
mBoundChaseCamera.setBoundsEnabled(true);
mBoundChaseCamera.setChaseEntity(sPlayer);
final FixtureDef PLAYER_FIX = PhysicsFactory.createFixtureDef(1.0f,.5f, .2f); // *(density, elasticity, friction)
body = PhysicsFactory.createBoxBody(physicsWorld, sPlayer,BodyType.DynamicBody, PLAYER_FIX);
physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer,body, true, false));

Sprite sLaunch = new Sprite((CAMERA_WIDTH-80),10, launchTR, getVertexBufferObjectManager()){
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
body.applyLinearImpulse(20, 30, body.getWorldCenter().x, body.getWorldCenter().y);
return true;
}
};

mScene.attachChild(sPlayer);
mScene.registerTouchArea(sLaunch);
mScene.attachChild(sLaunch);
mScene.setTouchAreaBindingOnActionDownEnabled(true);

// Callback
pOnPopulateSceneCallback.onPopulateSceneFinished();
}

我不是在找人来编写我的代码,甚至不一定要调试它。如果有人可以为我指出正确的方向,或者推荐最佳实践来实现我正在尝试做的事情。

最佳答案

您的代码的错误在于它缺少 setBound(...) 方法,该方法在启用设置相机边界以限制相机的 X、Y 移动时使用。没有它,相机会将被追逐的实体保持在屏幕中间。

例子:假设您有一个游戏,玩家在纵向模式下从底部爬到顶部。因此,为了看起来专业,玩家必须从设备屏幕的底部开始向上移动。所以在这种情况下,相机会追逐玩家,但一开始我们需要将相机的下界设置在玩家的正下方,所以当它真正跟随玩家时,一开始玩家并没有垂直居中,而是它出现在底部。

我的建议是使用 SmoothCamera(它扩展了相机的边界,但允许您设置相机的速度),然后根据需要设置边界。请记住,只有当玩家到达场景中为相机设置的边界时,“边界”效果才会出现

代码示例(不适用于之前的攀登):

    @Override
public EngineOptions onCreateEngineOptions() {

this.mCamera = new SmoothCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT, 1750, 1750, 0.1f);

EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(
CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);

mCamera.setBoundsEnabled(true);
mCamera.setBounds(0 , 0, MAX_CAMERA_X , MAX_CAMERA_Y);
return engineOptions;

}

关于android - 使用相机跟随 Sprite 时,我应该使用绑定(bind)相机(Andengine)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com