【问题标题】:AndEngine - scroll sprites up and downAndEngine - 上下滚动精灵
【发布时间】:2014-03-14 22:41:41
【问题描述】:

我是初学者和引擎用户,我需要你的帮助。

我创建了一个 MySprite 类扩展精灵,当我用手指在屏幕上滑动时,我希望精灵在 y 坐标上上下移动,只触摸精灵。

我试图通过实现 IScrollDetectorListener 和 IonSceneTouchListener 来实现这一点,但问题是:我可以触摸任何地方并且我的精灵会移动。

如果有人可以提供帮助,我会很高兴。

更多详情请评论:)

【问题讨论】:

  • 你只需要为你的精灵实现触摸区。你可以查看我的帖子。

标签: android andengine onscroll


【解决方案1】:
         Sprite mySprite = new Sprite(x, y, textureRegion, this.getVertexBufferObjectManager()) {
            @Override
            public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {

 this.setPosition(x, y);
            //Insert Code Here
            return true;
             }};

        // dont forgot to register your touch area i.e 
        mScene.registerTouchArea(mySprite);
    // Hoping it may help you.

【讨论】:

    【解决方案2】:

    希望您正在尝试使用 sprite 制作滚动条。请使用此代码

    Initial scrollbarPosition = scrollbar.getX(); //fix this position
    
    final Sprite scrollbar= new Sprite(centerX, centerY, this.scrollbarTextureRegion, this.getVertexBufferObjectManager()) {
                @Override
                public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
                    this.setPosition(scrollbarPosition, pSceneTouchEvent.getY() - this.getHeight() / 2);
                    return true;
                }
            };
    
    scene.attachChild(scrollbar);
    scene.registerTouchArea(scrollbar);
    scene.setTouchAreaBindingOnActionDownEnabled(true);
    

    希望对您有所帮助,谢谢。

    【讨论】:

      【解决方案3】:

      如果您只想在 Y 坐标上移动它,您首先必须覆盖 onAreaTouched,然后在抑制 X 移动的同时处理 Y 移动。试试下面的代码:

      Sprite mSprite = new Sprite(mX, mY, mTexture, this.mEngine.getVertexBufferObjectManager()) {                        
                          @Override
                          public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
                              this.setPosition(this.getX(), pSceneTouchEvent.getY());                         
                              return true;
                          }
                      };
                      this.mScene.attachChild(mSprite);
                      this.mScene.registerTouchArea(mSprite);
      

      哦,如果你使用 GLES2-AnchorCenter 分支,它会工作得很好!

      希望对您有所帮助! :)

      【讨论】: