Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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
Java 当已经产生了新的精灵时,精灵不会被移除_Java_Android_Andengine - Fatal编程技术网

Java 当已经产生了新的精灵时,精灵不会被移除

Java 当已经产生了新的精灵时,精灵不会被移除,java,android,andengine,Java,Android,Andengine,我对安卓游戏开发完全陌生,并尝试使用安卓引擎开发游戏。 我想第一步进展顺利,但现在我有点卡住了。 最后的游戏应该是类似于空中控制()的东西(除了我没有使用飞机,而是我的侄子在太空中;) createPlayer()方法应该做什么:它应该在一个随机的屏幕外位置创建一个播放器,获得一个随机的屏幕外目标位置,并在两点之间绘制一条路径。现在玩家应该使用路径修改器飞行。在玩家出现在屏幕上之前,应该有一个小箭头作为指示器,显示下一个玩家来自哪里。当播放器出现在屏幕上时,这个小指示器应该消失 我正在使用一个简

我对安卓游戏开发完全陌生,并尝试使用安卓引擎开发游戏。 我想第一步进展顺利,但现在我有点卡住了。 最后的游戏应该是类似于空中控制()的东西(除了我没有使用飞机,而是我的侄子在太空中;)

createPlayer()方法应该做什么:它应该在一个随机的屏幕外位置创建一个播放器,获得一个随机的屏幕外目标位置,并在两点之间绘制一条路径。现在玩家应该使用路径修改器飞行。在玩家出现在屏幕上之前,应该有一个小箭头作为指示器,显示下一个玩家来自哪里。当播放器出现在屏幕上时,这个小指示器应该消失

我正在使用一个简单的计时器来繁殖玩家。当我把计时器的时间间隔设置为10秒时,一切都正常工作。 当我将计时器设置为更小的值时,比如1秒,问题是指示器没有被移除。它只是停留在最后的位置

我认为这是因为已经产生了一个新的玩家,而该玩家或playerIndicator指向了新创建的玩家。我不知道如何改变这一点

我的错在哪里

以下是我的createPlayer方法和player类:

createPlayer()方法


没有人有任何想法?
private void createPlayer() {

    float[] startPos = getPlayerRandomStartPosition();
    float[] targetPos = getPlayerRandomTargetPosition(startPos);

    int playerNr = 0 + (int)(Math.random() * ((2 - 0) + 1));

    int[] playerSpeed = { 25, 35, 45 };
    float[] playerScale = { 0.3f, 0.25f, 0.2f };
    String[] playerName = { "marvin", "noah", "liam" };
    ITiledTextureRegion[] tex = { resourcesManager.p1_region, resourcesManager.p2_region, resourcesManager.p3_region };

    float pointsListX[] = { startPos[0], targetPos[0] };
    float pointsListY[] = { startPos[1], targetPos[1] };

    Path path = new Path(pointsListX.length);
    for (int j = 0; j < pointsListX.length; j++) {
        path.to(pointsListX[j], pointsListY[j]);
    }

    player = new Player(startPos[0], startPos[1], tex[playerNr], vbom) {};

    player.registerUpdateHandler(new IUpdateHandler() {

        @Override
        public void reset() {}

        @Override
        public void onUpdate(float pSecondsElapsed) {

            if (player.getPlayerIndicator() != null) {
                if (player.getStartPos()[1] <= 0) {
                    player.getPlayerIndicator().setPosition(player.getX(), 0 + (resourcesManager.indicator_region.getHeight() / 2));
                } else if (player.getStartPos()[1] >= 800) {
                    player.getPlayerIndicator().setPosition(player.getX(), 800 - (resourcesManager.indicator_region.getHeight() / 2));
                } else if (player.getStartPos()[0] <= 0) {
                    player.getPlayerIndicator().setPosition(0 + (resourcesManager.indicator_region.getHeight() / 2), player.getY());
                } else {
                    player.getPlayerIndicator().setPosition(480 - (resourcesManager.indicator_region.getHeight() / 2), player.getY());
                }
            }

            if (camera.isEntityVisible(player)) {

                if (player.getPlayerIndicator() != null) {
                    engine.runOnUpdateThread(new Runnable() {
                        @Override
                        public void run() {
                            final EngineLock engineLock = engine.getEngineLock();
                            engineLock.lock();
                            player.getPlayerIndicator().detachSelf();
                            player.getPlayerIndicator().dispose();
                            player.setPlayerIndicator(null);
                            engineLock.unlock();
                        }  
                    });
                }
            }

        }
    });

    player.registerEntityModifier(new PathModifier(playerSpeed[playerNr], path) {
        @Override
        protected void onModifierFinished(final IEntity pItem) {
            engine.runOnUpdateThread(new Runnable() {
                @Override
                public void run() {
                        final EngineLock engineLock = engine.getEngineLock();
                        engineLock.lock();
                        pItem.detachSelf();
                        pItem.dispose();
                        engineLock.unlock();
                        addToScore();
                }  
            });
            super.onModifierFinished(pItem);
        }
    });

    player.setHasBeenOnScreen(false);
    player.setTargetPos(targetPos);
    player.setStartPos(startPos);
    player.setScale(playerScale[playerNr]);
    player.setSpeed(playerSpeed[playerNr]);
    player.setUserData(playerName[playerNr]);
    player.setRotation(getTargetAngle(targetPos[0], targetPos[1], player.getX(), player.getY()));

    PlayerIndicator playerIndicator;

    if (startPos[1] <= 0) {
        playerIndicator = new PlayerIndicator(startPos[0], 0 + (resourcesManager.indicator_region.getHeight() / 2), resourcesManager.indicator_region, vbom);
        playerIndicator.setRotation(180);
    } else if (startPos[1] >= 800) {
        playerIndicator = new PlayerIndicator(startPos[0], 800 - (resourcesManager.indicator_region.getHeight() / 2), resourcesManager.indicator_region, vbom);
    } else if (startPos[0] <= 0) {
        playerIndicator = new PlayerIndicator(0 + (resourcesManager.indicator_region.getHeight() / 2), startPos[1], resourcesManager.indicator_region, vbom);
        playerIndicator.setRotation(270);
    } else {
        playerIndicator = new PlayerIndicator(480 - (resourcesManager.indicator_region.getHeight() / 2), startPos[1], resourcesManager.indicator_region, vbom);
        playerIndicator.setRotation(90);
    }

    playerIndicator.setAlpha(0.5f);
    player.setPlayerIndicator(playerIndicator);

    attachChild(playerIndicator);
    attachChild(player);
}
public class Player extends AnimatedSprite {

    public Player(float pX, float pY, ITiledTextureRegion pTiledTextureRegion, VertexBufferObjectManager pVertexBufferObjectManager) {
        super(pX, pY, pTiledTextureRegion, pVertexBufferObjectManager);
        long[] frameDurration = {300, 300, 300};
        animate(frameDurration);
        hasBeenOnScreen = false;
    }

    float[] startPos = { -100, -100 };
    float[] targetPos;
    int speed = 10;
    PlayerIndicator playerIndicator;
    boolean hasBeenOnScreen = false;

    public PlayerIndicator getPlayerIndicator() {
        return playerIndicator;
    }

    public void setPlayerIndicator(PlayerIndicator playerIndicator) {
        this.playerIndicator = playerIndicator;
    }

    public boolean hasBeenOnScreen() {
        return hasBeenOnScreen;
    }

    public void setHasBeenOnScreen(boolean hasBeenOnScreen) {
        this.hasBeenOnScreen = hasBeenOnScreen;
    }

    public float[] getStartPos() {
        return startPos;
    }

    public void setStartPos(float[] startPos) {
        this.startPos = startPos;
    }

    public float[] getTargetPos() {
        return targetPos;
    }

    public void setTargetPos(float[] targetPos) {
        this.targetPos = targetPos;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

}