简体   繁体   English

我的打勾方法搞砸了

[英]My tick method is messed up

I created a class called Bullets: 我创建了一个名为Bullets的类:

public class Bullets {

private double x;
private double y;
private BufferedImage bulletImage;
Bullets(double x, double y){
    this.x = x;
    this.y = y;
    ImageLoader loader = new ImageLoader();
    SpriteSheet ss = new SpriteSheet(loader.loadImage("/Pics/TheSpriteSheet.png"));
    bulletImage = ss.grabImage(2, 1, 32, 32);
}

public void render(Graphics g){
    g.drawImage(bulletImage, (int)x, (int)y, null);
}
public void tick(){
    y--;
}
}

Then I created a class called BulletQualities: 然后,我创建了一个名为BulletQualities的类:

package mainPackage;

import java.awt.Graphics;
import java.util.LinkedList;

public class BulletQualities {
Bullets b;
private LinkedList<Bullets> bulletList = new LinkedList<Bullets>();

public void addBullet(Bullets b){
    bulletList.add(b);
}
public void tick(){
    for(int x = 0;x <= bulletList.size();x++){

I get an error on this line 我在这条线上出现错误

        bulletList.get(x).tick();
    }
}
public void render(Graphics g){
    for(int x = 0;x <= bulletList.size(); x++){
        bulletList.get(x).render(g);
    }
}
public void removeBullet(Bullets bullet){
bulletList.remove(bullet);
}
}

Then, in my Game class I did this: 然后,在我的游戏课中,我这样做了:

Bullets b = new Bullets(playerClass.getX(), playerClass.getY());
BulletQualities bulletQualities = new BulletQualities();
public void init(){
    bulletQualities.addBullet(b);
}
public void render(){
    BufferStrategy bs = this.getBufferStrategy();
    if(bs == null){
        createBufferStrategy(3);
        return;
    }
    Graphics g = bs.getDrawGraphics();
    ////////////////////////////////////////////
    g.drawImage(background, 0, 0, this);
    playerClass.render(g);
    bulletQualities.render(g);
    ////////////////////////////////////////////
    g.dispose();
    bs.show();
}

public void tick(){
    playerClass.tick();

I get an error on this line 我在这条线上出现错误

    bulletQualities.tick();
}

The exact error I get is this: 我得到的确切错误是这样的:

Exception in thread "Thread-4" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.LinkedList.checkElementIndex(Unknown Source) at java.util.LinkedList.get(Unknown Source) at mainPackage.BulletQualities.tick(BulletQualities.java:15) at mainPackage.Game.tick(Game.java:105) at mainPackage.Game.run(Game.java:78) at java.lang.Thread.run(Unknown Source) 线程“ Thread-4”中的异常java.lang.IndexOutOfBoundsException:索引:1,大小:mainPackage.BulletQualities处java.util.LinkedList.get(未知源)处的java.util.LinkedList.checkElementIndex(未知源)处的1。在mainPackage.Game.tick(Game.java:105)上的mainPackage.Game.run(Game.java:78)上的tick(BulletQualities.java:15)在java.lang.Thread.run上的tick(Game.java:78)(未知源)

You need to iterate the list only upto size-1 index. 您只需要迭代列表直到size-1索引。 So change this: 所以改变这个:

for(int x = 0;x <= bulletList.size();x++){

to

for(int x = 0;x < bulletList.size();x++){

List internally stores element in an array and an array contains element from 0th index to upto its size-1 index. List在内部将元素存储在数组中,并且数组包含从第0个索引到其size-1索引的元素。 Anytime you will try to get bulletList.get(x) where x= size of list, it will throw an IndexOutOfBoundsException 每当您尝试获取bulletList.get(x),其中x =列表大小时,它将抛出IndexOutOfBoundsException

There are better way to iterate list in Java verion 5.0 and abaove. 在Java版本5.0和abaove中,有更好的方法来迭代列表。 Using enhanced for loop, you will never run into such situation. 使用增强的for循环,您将永远不会遇到这种情况。 Here is how you can transform your code using enhanced for loop: 这是使用增强的for循环转换代码的方法:

for(Bullets bullet:bulletList){
    bullet.tick();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM