在屏幕上移动敌人子弹动画需要一些帮助

时间:2013-04-29 14:30:46

标签: java animation lwjgl slick2d bullet

我需要帮助弄清楚为什么当敌人的子弹有相同的代码时它们不会移动...请帮助......我没有把它们作为一个单独的类只做简单的动画

现在我认为你可以看到我说他们有相同的代码,我的意思是像IDENTICAL代码哈哈。这真的让我失望,玩家的子弹可以正常工作,但敌人的子弹不会做任何事情

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
map.draw(0,0);
// First enemy
enemy1.draw(enemy1PosX, enemy1PosY);
enemyShot.draw(enemy1PosX+30, enemy1PosY + 65);


//Player
ship.draw(shipPosX, shipPosY);
playerShot.draw(shootPosX+23, shootPosY);
Animation copy = playerShot.copy();
copy.draw(shootPosX+23, shootPosY);

g.drawString("Ship X: " + shipPosX + "\nShips Y: " + shipPosY,400,20);

if(quit == true) {
    g.drawString("Resume (R)",250,100);
    g.drawString("Main Menu (M)",250,150);
    g.drawString("Quit Game(Q)",250,200);
    if(quit==false){
        g.clear();
    }

}

}

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
Input input = gc.getInput();
//Move Enemy

enemy1=enemyA;
//enemy1PosX += delta * .7f;
//enemy1PosY += delta * .1f;
    if(enemy1PosX > 668){
        enemy1PosX = -1;
        if(isEnemyHit(enemy1)){
            deadEnemies.add(enemy1);
    }
}


// up
if(input.isKeyDown(Input.KEY_UP)){
    ship = move;
    movefx.play();
    shipPosY -= delta * .6f;
    //collision detection
    if(shipPosY < 9){
        shipPosY = 9;

    }
}
//down
if(input.isKeyDown(Input.KEY_DOWN)){
    ship = move;
    shipPosY += delta * .6f;
    //collision detection
    if(shipPosY > 468){
        shipPosY = 468;
    }
}
//left
if(input.isKeyDown(Input.KEY_LEFT)){
    ship = move;
    shipPosX -= delta * .6f;
    //collision detection
    if(shipPosX < -1){
        shipPosX =-1;
    }
}
//right
if(input.isKeyDown(Input.KEY_RIGHT)){
    ship = move;
    shipPosX += delta * .6f;

    //collision detection
    if(shipPosX > 668){
        shipPosX = 668;
    }
}
    //FIRE PLAYER BULLETS
    playerShot = shootUp;
    playerShot.start();
    shootPosX = shipPosX-10;
    shootPosY -= delta * 1.3f;
    Animation copy = playerShot.copy();

    //Auto-Shoot bullet
    if(shootPosY <= shipPosY - 480){
        copy = playerShot;
        shootPosX = shipPosX;
        shootPosY = shipPosY; 
        shootPosY -= delta * 1.7f;
        copy.restart();
    }

    //FIRE ENEMY BULLETS
    enemyShot = shootDown;
    enemyShot.start();
    enemyShotPosX = enemy1PosX + 10;
    enemyShotPosY += delta * .3f;
    Animation dbl = playerShot.copy();

EnemyShot是一个动画播放器。射击是一个动画,也没有单独的敌人或玩家类。请帮忙

1 个答案:

答案 0 :(得分:0)

你可能想要给每个敌人的子弹它自己的位置,而不是相对于敌人本身的位置。这是在你的渲染方法中:

enemyShot.draw(enemy1PosX+30, enemy1PosY + 65);

根据我的理解,在最好的情况下,这将使子弹跟随敌人x和y位置以少量位移。此外,你有代码,使敌人的运动得到评论,这是:  //enemy1PosX += delta * .7f; //enemy1PosY += delta * .1f; 希望这有帮助!