在 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 中滚动子场景的主要内容,如果未能解决你的问题,请参考以下文章

Android Andengine 背景音乐自动复制

Andengine,缩放图像以填充屏幕大小,而不保持纵横比

判断元素滚动状态

如何在 android/andengine 中剪辑或屏蔽实体?

在 Andengine 中摇摆精灵

andengine的基础知识