0

それでは、開始するコードをいくつか示します。最初に Bullet というクラスを作成しました。これは、イメージをロードする場所です。

package gameLibrary;

import java.awt.*;
import javax.swing.ImageIcon;

public class Bullet {

    int x,y;
    Image img;
    boolean visible;

    public Bullet(int startX, int startY) {
        x = startX;
        y = startY;

        ImageIcon newBullet = new ImageIcon("/resources/bullet.png");
        img = newBullet.getImage();
        System.out.println("constructor Bullet is called");
        visible = true;
    }
    public void move(){
        x = x + 1;
        if(x > 854){
            System.out.println("Bullet is moving at X = " + x);
            visible = false;  
        }
    }
    public int getX(){
        return x;
    }
    public int getY() {
        return y;
    }
    public boolean getVisible(){
        return visible;
    }
    public Image getImage(){
        return img;
    }
}

スペースバーが押されると、fire() というメソッドが呼び出されます。ここで、新しい Bullet(X, Y); が呼び出され、ArrayList に格納されます。

public void fire(){
    if(ammo > 0) {
        Bullet z = new Bullet(left + 60, y + 70);
        bullets.add(z);
        ammo--;
    }
}
public static ArrayList getBullets(){
    return bullets;
}

このコードは、弾丸を画面上で移動します。

ArrayList bullets = Character.getBullets();
for(int i = 0; i < bullets.size(); i++){
    Bullet m = (Bullet) bullets.get(i);
    if(m.getVisible() == true){
        m.move();
    }if(m.getVisible() == false) {
        bullets.remove(i);
    }
}

最後に print メソッドのコードです。

ArrayList bullets = Character.getBullets();
for(int i = 0; i < bullets.size(); i++){
    Bullet m = (Bullet) bullets.get(0);
    g2d.drawImage(m.getImage(),m.getX(),m.getY(), null);
}

どこで間違ったのかわかりません。弾丸の機能は、画面上の画像の印刷だけであることがわかる限り、すべて機能しています。提案は大歓迎です。

4

2 に答える 2

1

通常、リソースは Class.getResource でロードされます

ImageIcon newBullet = new ImageIcon(Bullet.class.getResource("resources/bullet.png"));

もちろん、リソース フォルダーは、Bullet クラスと同じパッケージ (つまり、同じフォルダー) にある必要があります。そのコードは、ゲームが jar に入っているかどうかに関係なく常に機能するはずです。

于 2013-10-09T00:17:01.270 に答える