在 AndEngine 中滚动子场景
Posted
技术标签:
【中文标题】在 AndEngine 中滚动子场景【英文标题】:Scrolling a childscene in AndEngine 【发布时间】:2013-07-08 00:35:45 【问题描述】:我在滚动子场景时遇到问题。我创建了一个 CameraScene,我试图通过触摸事件滚动它。我的子场景没有滚动,但是,如果我在连接到引擎的相机上滚动,父场景滚动正常。
那么我如何让我的子场景滚动而不让附加到我父母场景的对象滚动?
public StatsScene(Context context, VertexBufferObjectManager vbo)
super(new SmoothCamera(0, 0, WITDH, HEIGHT, 0, SPEEDY, 0));
this.setOnSceneTouchListener(new IOnSceneTouchListener()
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent)
if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN)
mTouchY = pSceneTouchEvent.getMotionEvent().getY();
else if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_MOVE)
float newY = pSceneTouchEvent.getMotionEvent().getY();
mTouchOffsetY = (newY - mTouchY);
float newScrollX = getCamera().getCenterX();
float newScrollY = getCamera().getCenterY() - mTouchOffsetY;
getCamera().setCenter(newScrollX, newScrollY);
mTouchY = newY;
return true;
);
【问题讨论】:
【参考方案1】:我并不是真的喜欢 AndEngine,我不确定我是否能解决您的问题(在您的代码中与“myparents”或“childscene”无关),但是当某些东西附加到您的场景时,这意味着它会随之移动。您可以向另一个方向滚动您的孩子以保持他们的位置,但这可能会给您带来长期的麻烦。如果可能,请尝试将您的滚动场景和您的对象分开,这意味着它们不应该是彼此的孩子。相反,如果您希望他们保持相关性,请给他们一个共同的父母。如果你现在移动一个对象,兄弟姐妹就不会。希望对您有所帮助。
【讨论】:
【参考方案2】:根据您的描述,我认为您的父场景是获得您输入的场景,所以我猜,如果我错了,请纠正我,您正在设置您的子场景,如下所示:
mMainScene.attachChild(mChildScene);
在这种情况下,您将不得不处理将输入偏离到子级而不是父级的问题。但是,您有几个选择:
如果您的子场景占据全屏并且您无需担心更新/绘制父场景,只需将场景与
mEngine.setScene(mChildScene);
如果您确实需要继续绘制和更新父场景,请检查 MenuScene 预制类和 Scene.setChildScene() 方法,我认为有一个示例说明如何在 AndengineExamples 项目中使用它。使用这个类可以让你接受子场景的输入,但仍然绘制和更新你的主场景,它甚至可以让你以模态方式设置你的孩子。
【讨论】:
以上是关于在 AndEngine 中滚动子场景的主要内容,如果未能解决你的问题,请参考以下文章