android - AndEngine相机偏移和2个场景

标签 android andengine

我在 Andengine 中使用此方法通过设置相机的偏移来滚动项目列表。

@Override
        public void onScroll(ScrollDetector pScollDetector, int pPointerID,
                float pDistanceX, float pDistanceY) {
            //Disable the menu arrows left and right (15px padding)
            if(mCamera.getXMin()<=15)
                menuleft.setVisible(false);
             else
                menuleft.setVisible(true);

             if(mCamera.getXMin()>mMaxX-15)
                 menuright.setVisible(false);
             else
                 menuright.setVisible(true);

            //Return if ends are reached
            if ( ((mCurrentX - pDistanceX) < mMinX)  ){                 
                return;
            }else if((mCurrentX - pDistanceX) > mMaxX){

                return;
            }

            //Center camera to the current point
            this.mCamera.offsetCenter(-pDistanceX,0 );
            mCurrentX -= pDistanceX;


            //Set the scrollbar with the camera
            float tempX =mCamera.getCenterX()-CAMERA_WIDTH/2;
            // add the % part to the position
            tempX+= (tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH;      
            //set the position
            //scrollBar.setPosition(tempX, scrollBar.getY());

            //set the arrows for left and right
            menuright.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY());
            menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY());



            //Because Camera can have negativ X values, so set to 0
            if(this.mCamera.getXMin()<0){
                this.mCamera.offsetCenter(0,0);
                mCurrentX=0;
            }


        }

问题是我将其用作 Activity 中的第二个场景, 因此,当我导航回第一个 Activity 时,第一个场景由于移动了相机而错位了。

回到第一个场景时,有没有办法重置相机?

我尝试了 Camer.reset() 无济于事。

有什么建议吗?

最佳答案

使用 mCamera.setCenter(CAMERA_WIDTH/2, CAMERA_HEIGHT/2);。它将重置相机位置。

顺便说一句,我看到你不断根据相机位置更改菜单箭头。你知道,AndEngine 有一个类来处理这种情况 :) 你没有理由手动做...... 它叫做 HUD,意思是 Head-Up Display .您可以扩展 HUD class , HUD 只是一个放置在屏幕上固定位置的场景。您可以根据需要向其中添加任意数量的实体。然后,只需调用 mCamera.setHUD(此处是您的 HUD 对象); 就大功告成了,无需在相机上移动实体。

我看到的另一个问题是,您调用了 mCamera.offsetCenter(0, 0);offsetCenter 只是将参数添加到当前的中心坐标。添加 0 根本没有影响,所以这个调用是无用的。你想达到什么目的?将相机重置回 (0, 0)?

编辑:

这是我自己游戏中的一个 HUD 示例:

public class AttackControl extends HUD {
// ===========================================================
// Constants          
// ===========================================================

// ===========================================================          
// Fields         
// =========================================================== 
private Sprite mSprite;
private IAttackControlClickListener mListener;
// ===========================================================          
// Constructors          
// =========================================================== 
public AttackControl(final float pX, final float pY, final Camera pCamera, final TextureRegion pTextureRegion, final IAttackControlClickListener pListener) {
    super.setCamera(pCamera);
    this.mListener = pListener;
    this.mSprite = new Sprite(pX, pY, pTextureRegion) {
        @Override
        public boolean onAreaTouched(final TouchEvent pTouchEvent, final float pX, final float pY) {
            AttackControl.this.mListener.onClick();
            return true;
        }
    };
    super.attachChild(this.mSprite);
    super.registerTouchArea(this.mSprite);
}
// ===========================================================          
// Getter & Setter          
// =========================================================== 

// ===========================================================          
// Methods for/from SuperClass/Interfaces          
// ===========================================================  

// ===========================================================          
// Methods          
// ===========================================================  

// ===========================================================          
// Inner and Anonymous Classes          
// ===========================================================  
public interface IAttackControlClickListener {
    public void onClick();
}
} 

然后你创建这个类的一个实例:

final AttackControl attackControl = new AttackControl(...);

并将其设置为相机的 HUD:

mCamera.setHUD(attackControl);

在任何情况下你想使用超过 1 个 HUD,你设置 1 作为一个 HUD 然后让下一个成为第一个的子场景。例如,如果我有另一个名为 DisplayStats 的 HUD,并且我是这样创建的:

final DisplayStats displayStats = new DisplayStats(...);

然后,将其设置为攻击控件的子场景即可。记住 - HUD 就是场景!所有场景操作在这里都是合法的。

attackControl.setChildScene(displayStats);

现在,下一个 HUD 可能是 displayStats 的子场景……等等。

关于android - AndEngine相机偏移和2个场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783729/

相关文章:

Android - 复选框文本上的阴影 - xml

java - 如何获取存储在ArrayList<HashMap<key,value>>中的值?

android AndEngine 获取 Tap(Click) 事件?

android - pEntity 已有父级

java - 按位置直接从 RecyclerView 访问 ViewHolder

Android 软键盘显示在对话框 fragment 下

android - 如何防止元素隐藏在透明操作栏后面

android - 如何处理 Galaxy S4 分辨率,因为它对于 AndEngine RatioResolutionPolicy 来说太高了

java - System.gc 将在 android(Andengine) 中工作

java - Admob 广告未在我的应用中显示