android–AndEngine相机胶印和2个场景

android–AndEngine相机胶印和2个场景,第1张

概述我在Andengine中使用此方法通过设置相机的偏移来滚动项目列表.@OverridepublicvoidonScroll(ScrollDetectorpScollDetector,intpPointerID,floatpDistanceX,floatpDistanceY){//Disablethemenuarrowsleftandright(15pxp

我在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中的第二个场景,
因此,当我导航回第一个活动时,由于相机被移动,第一个场景位置不正确.

无论如何我回到第一个场景时可以重置相机吗?

我试过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个场景全部内容,希望文章能够帮你解决android – AndEngine相机胶印和2个场景所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1114228.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存