Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AndEngine相机偏移和2个场景_Android_Andengine - Fatal编程技术网

Android AndEngine相机偏移和2个场景

Android AndEngine相机偏移和2个场景,android,andengine,Android,Andengine,我在Andengine中使用此方法,通过设置相机的偏移量,在项目列表中滚动 @Override public void onScroll(ScrollDetector pScollDetector, int pPointerID, float pDistanceX, float pDistanceY) { //Disable the menu arrows left and right (15px padding)

我在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;
            }


        }
@覆盖
公共无效onScroll(滚动检测器pScollDetector、int pPointerID、,
浮动pDistanceX,浮动pDistanceY){
//禁用左右菜单箭头(15px填充)
if(mCamera.getXMin()mMaxX-15)
menuright.setVisible(false);
其他的
menuright.setVisible(true);
//到达终点时返回
如果((mCurrentX-pDistanceX)mMaxX,则为其他情况{
返回;
}
//将摄影机居中到当前点
this.mCamera.offsetCenter(-pDistanceX,0);
mCurrentX-=pDistanceX;
//使用相机设置滚动条
float tempX=mCamera.getCenterX()-摄像头宽度/2;
//将%零件添加到该位置
tempX+=(tempX/(mMaxX+摄像头宽度))*摄像头宽度;
//定位
//设置位置(tempX,scrollBar.getY());
//设置左右箭头
menuright.setPosition(mCamera.getCenterX()+摄像头宽度/2-menuright.getWidth(),menuright.getY());
menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY());
//因为相机可以有负X值,所以设置为0

如果(this.mCamera.getXMin()使用
mCamera.setCenter(摄像头宽度/2,摄像头高度/2);
,它将重置摄像头位置

顺便说一句,我看到你一直在根据摄像机的位置改变菜单箭头。你知道,AndEngine有一个类来处理这种情况:)你没有理由手动操作。。。 它被称为
HUD
,这意味着。你可以扩展,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);
在任何情况下,如果要使用多个HUD,请将1设置为HUD,然后使下一个HUD成为第一个HUD的子场景。例如,如果我有另一个名为
DisplayStats
的HUD,并且我是这样创建的:

final DisplayStats displayStats = new DisplayStats(...);
然后,只需将其设置为攻击控制的子场景。记住-HUD就是场景!这里所有的场景操作都是合法的

attackControl.setChildScene(displayStats);

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

如果将来有人发现这一点,而其他答案还不够,试试这个

 mCamera.setZoomFactor(1.0f);

如果您使用的是
ZoomCamera
,则这是必需的。我正在执行此操作,因此如果我“挤压以缩放”然后切换场景,因为我的缩放因子被调整了,所以一切都乱七八糟。

再次感谢jong。我正在使用从这里得到的一个示例,以及HUD的代码外观。这是我第一次使用itI。稍后我会给你一个示例,我现在必须开始。关于相机,请尝试
mCamera.setCenter(camera\u WIDTH/2,camera\u HEIGHT/2)
如果这不起作用,请在离开第一个场景时保存相机位置,以便以后可以切换回它。mCamera.setCenter(camera_WIDTH/2,camera_HEIGHT/2);工作起来像charmGreat:)你还想要一个HUD示例吗?是的。那太好了!为什么要否决?这是完全必要的,对我来说是有效的。