Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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 甚至在手指不动的情况下,也能听到触摸式呼叫_Android_Andengine_Touch Event - Fatal编程技术网

Android 甚至在手指不动的情况下,也能听到触摸式呼叫

Android 甚至在手指不动的情况下,也能听到触摸式呼叫,android,andengine,touch-event,Android,Andengine,Touch Event,这是我的触摸屏控制方法。 当操纵杆被触动时,我想触发玩家射击 但是,使用此方法,OnAreTouched方法仅在我第一次触摸或移动手指时才会被调用。因此,如果我让手指在控件上保持静止,则不会触发if(isOnActionButton=true)事件 是否可以添加一些方法,使该方法在手指不动的情况下也能被调用 我的目标是让玩家在按下控制键的时候一直射击 提前谢谢 也许你可以用计时器 将此代码放入场景构造函数中 @Override public boolean onAreaT

这是我的触摸屏控制方法。 当操纵杆被触动时,我想触发玩家射击

但是,使用此方法,OnAreTouched方法仅在我第一次触摸或移动手指时才会被调用。因此,如果我让手指在控件上保持静止,则不会触发if(isOnActionButton=true)事件

是否可以添加一些方法,使该方法在手指不动的情况下也能被调用

我的目标是让玩家在按下控制键的时候一直射击


提前谢谢

也许你可以用计时器

将此代码放入场景构造函数中

@Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
                Log.d("GameScene", "Action Area Touched " + pTouchAreaLocalX + "," + pTouchAreaLocalY);
                float x = pSceneTouchEvent.getX();
                float y = pSceneTouchEvent.getY();
                if(pSceneTouchEvent.isActionDown()) {
                    actionDistance = (float) Math.sqrt((x-ACTION_POSITION_X)*(x-ACTION_POSITION_X)+(y-ACTION_POSITION_Y)*(y-ACTION_POSITION_Y));
                    isOnActionButton = true;
                    actionKnob.setPosition(x, y);
                } else if(pSceneTouchEvent.isActionMove()) {
                    actionDistance = (float) Math.sqrt((x-ACTION_POSITION_X)*(x-ACTION_POSITION_X)+(y-ACTION_POSITION_Y)*(y-ACTION_POSITION_Y));
                    if(actionDistance > actionBase.getWidth()/2) {
                        actionKnob.setPosition(((actionBase.getWidth()/2)*x + (actionDistance - (actionBase.getWidth()/2))*ACTION_POSITION_X)/actionDistance, ((actionBase.getWidth()/2)*y + (actionDistance - (actionBase.getWidth()/2))*ACTION_POSITION_Y)/actionDistance);
                    } else {
                        actionKnob.setPosition(x, y);
                    }
                } else if(pSceneTouchEvent.isActionUp()) {
                    actionKnob.setPosition(ACTION_POSITION_X, ACTION_POSITION_Y);
                    isOnActionButton = false;

                }

                if(isOnActionButton = true) {
                    double l = Math.sqrt((actionKnob.getX() - ACTION_POSITION_X)*(actionKnob.getX() - ACTION_POSITION_X) + (actionKnob.getY() - ACTION_POSITION_Y)*(actionKnob.getY() - ACTION_POSITION_Y));
                    double r = actionBase.getWidth()/2;
                    double deltaX = actionKnob.getX() - ACTION_POSITION_X;
                    double deltaY = actionKnob.getY() - ACTION_POSITION_Y;
                    player.shoot((float) (((deltaX*(r-l))/l) + deltaX), (float) (((deltaY*(r-l))/l) + deltaY), vbom, camera, physicsWorld);
                }
                return true;
            }
该计时器将以快照频率间隔在场景中运行。您需要创建一个常数,该常数包含两次拍摄之间所需的时间

如果你正在触摸屏幕,请将此内容放在课堂上进行拍摄:

        tHandle = new TimerHandler(SHOT_FREQUENCY, true, new ITimerCallback() {
        @Override
        public void onTimePassed(final TimerHandler pTimerHandler) {
            if (isOnActionButton)
                doShot();
        }
    });
    this.registerUpdateHandler(tHandle);
我希望这对你有帮助


对不起我的英语,我正在学习;)

我这样做的方式是在我的
Player
类中有一个布尔
isShooting
。我的
游戏场景
我有:

    public void doShot(){
        shot();
}
在我的
Player
课程中,我有:

this.registerUpdateHandler( new IUpdateHandler() {

        @Override
        public void reset() {

            // TODO Auto-generated method stub

        }


        @Override
        public void onUpdate( float pSecondsElapsed ) {

            player.update( pSecondsElapsed );

        }
    } );
现在,只需通过以下任一方式在重新触摸的
方法中设置布尔值:

public void update( float pSecondsElapsed ) {
    if(isShooting){
        this.shoot();
    }
 }


如果你不想在
Player
类中进行拍摄工作,你可以创建一个方法来提前发送数据,因此当调用
Player.update
时,你可以引用你在
onAreaTouched
方法中发送的变量。

谢谢,尽管我使用了另一种方法,我很高兴我了解了TimerHandler。非常方便!
player.isShooting = true;
player.setIsShooting(true);