This site requires JavaScript, please enable it in your browser!
Greenfoot back
BurnLikeSiracha
BurnLikeSiracha wrote ...

2018/8/2

How to make a bullet destroy an enemy

BurnLikeSiracha BurnLikeSiracha

2018/8/2

#
I am trying to make a tank game where my tank shoots an enemy tank but I get an error code every time I try and make it destroy an enemy. Please Help!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
     * Act - do whatever the Bullet wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act()
    {
        // Add your action code here.
 
        move(speed);
        //isWorldEdge();
        checkBoundaries();
        destroyComp();
 
         
    }   
 
    private void checkBoundaries()
    {
 
        if (!getIntersectingObjects(Wall.class).isEmpty() || getX() == 0 || getY() == 0 || getX() == getWorld().getWidth() - 1 || getY() == getWorld().getHeight() - 1)
        {
            getWorld().removeObject(this);
        }
         
    }
 
    private void destroyComp()
    {
        if (isTouching(Computer.class))
        {
            removeTouching(Computer.class);
        }
         
         
 
             
 
    }
BurnLikeSiracha BurnLikeSiracha

2018/8/2

#
The error code is "java.lang.IllegalStateException: Actor not in world. An attempt was made to use the actor's location while it is not in the world. Either it has not yet been inserted, or it has been removed. at Bullet.destroyComp(Bullet.java:50) at Bullet.checkBoundaries(Bullet.java:45) at Bullet.act(Bullet.java:32)"
danpost danpost

2018/8/3

#
BurnLikeSiracha wrote...
I am trying to make a tank game where my tank shoots an enemy tank but I get an error code every time I try and make it destroy an enemy. << Code Omitted >>
You cannot check for a Computer object after checking edges without first ensuring the Bullet object is still in the world. Change line 12 to:
1
if (getWorld() != null) destroyComp();
or just switch lines 11 and 12.
You need to login to post a reply.