Advertisement

12.02.2008 at 06:21AM PST, ID: 23949652 | Points: 125
[x]
Attachment Details

J2ME Game Canvas, Use Sprite Multiple Times

Ok, I am creting a Space Invaders like game.  The problem is i have created a sprite for the invaders (invaderSprite) however i currently onliy have one showing. I need to use this same sprite a number of times to create multiple invaders.

I was told that i can use hashtables to create an array like of sprites.  You will see in the code bellow where i create this:

     ht = new Hashtable();
     ht.put("1", invaderSprite);
     ht.put("2", invaderSprite);
     ht.put("3", invaderSprite);

I presume this creates the 'array' of sprites which will then allow me to apend to the game.  However this i cannot figure out i tried:

for(i = 1; i<3; i++ )
{
    invaderSprite = (Sprite)ht.get("i");
        manager.append(invaderSprite);
}

but it did not seem to like this.  Can anyone help?  I am not a game programmer or indeed much of a programmer at all and i aint that good with J2ME!

Cheers
Gary
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:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
import java.util.Random;
import java.io.*; 
import java.util.*;
import javax.microedition.lcdui.*; 
import javax.microedition.lcdui.game.*;
 
public class GameScreen extends GameCanvas implements Runnable
{   
    private Vector al;
    private Hashtable ht;
    private Image spaceImage;  
    private Image shipImage;    
    private Image invaderImage;
    private Image bulletImage;
    private LayerManager manager;
    private Sprite spaceSprite;
    private Sprite shipSprite;
    private Sprite invaderSprite;
    private Sprite bulletSprite;
    private Thread gameThread;
    private boolean isGameRunning;
    private int shipX;
    private int shipY;
    private int invaderX;   
    private int invaderY;
    private int bulletX;
    private int bulletY;
    private boolean isMovingRight;
    private boolean fired;
    private boolean invaderfire;
    private Random rndm = new Random();
    private int score;
    private int i;
    SpaceInvaders theMidlet;
    
    
    public GameScreen(SpaceInvaders m)    
    {
        super(true);   
        this.theMidlet = m;
        isMovingRight = true;
        loadImages(); 
        manager = new LayerManager();
        loadSprites();    
        isGameRunning = true;
        setInitialPositions();
    }   
 
    public void start()
    {     
        gameThread = new Thread(this);     
        gameThread.run();
    }
   
    
    
     public void run()   
     {   
         Graphics g = getGraphics();   
         while(isGameRunning)   
         {   
             checkUserInput();   
 
             moveObjects();   
             
             collisionDetection();  
             updateGameScreen(g);  
             flushGraphics();
             
             
             invaderSprite.nextFrame();
             
             try  
             {  
                 gameThread.sleep(60);  
             }  
             catch(InterruptedException ie)  
             {  
                 System.err.println(ie);  
             }  
         }  
     }
    
    public void loadSprites()
    {
 
     
       spaceSprite = new Sprite(spaceImage);
       shipSprite = new Sprite(shipImage);
             
       invaderSprite = new Sprite(invaderImage, 12, 8);
 
       bulletSprite = new Sprite(bulletImage);
       
       
     ht = new Hashtable();
     ht.put("1", invaderSprite);
     ht.put("2", invaderSprite);
     ht.put("3", invaderSprite);
       
       //Remember the z-order
 
        manager.append(invaderSprite);
 
       manager.append(shipSprite);
       manager.append(bulletSprite);
       manager.append(spaceSprite);
      
       
    }
    
    public void checkUserInput()   
    {   
        int button = getKeyStates(); 
        if((button & LEFT_PRESSED) != 0)   
        {   
            //Check the paddle is not already at the top   
            if(shipX >0)   
            {   
                shipX -= 4;  
            }  
        }  
        if((button & RIGHT_PRESSED) != 0)  
        {  
            //Check the paddle isn't at the bottom of the screen  
            if(shipX < spaceSprite.getWidth() - shipSprite.getWidth())  
            {  
                shipX += 4;  
            }  
        }  
        //Set the new location  
        shipSprite.setRefPixelPosition(shipX, shipY); 
        
        if((button & UP_PRESSED) != 0)
        {
            if(!fired)
            {
                bulletSprite.setRefPixelPosition(shipX + shipSprite.getWidth() /2, shipY);
                bulletSprite.setVisible(true);
                fired = true;
            }
        }
    }
       
    
    public void moveObjects()   
    {   
        
          if(isMovingRight)     
          {
              
              if(invaderX < spaceSprite.getWidth() - invaderSprite.getWidth())
              {
              
                  invaderX += 2;   
              }   
              
              if(invaderX >= spaceSprite.getWidth() - invaderSprite.getWidth())   
              {  
                  isMovingRight = false;
                  invaderY += invaderSprite.getHeight();
              }  
          
          }
          else if(!isMovingRight)   //If its supposed to move left  
          {  
                     if(invaderX > 0)  
                     {  
                         invaderX -= 2;  
                     }  
                     
                     if(invaderX <= 0)  
                     {  
                         isMovingRight= true;
                         
                         invaderY += invaderSprite.getHeight();
                         
                     }  
          }  
    
        invaderSprite.setRefPixelPosition(invaderX, invaderY);  
    
        
        if(fired)
        {
            bulletY = bulletSprite.getRefPixelY(); 
            bulletX = bulletSprite.getRefPixelX(); 
            if(bulletY < spaceSprite.getHeight() - bulletSprite.getHeight())   
              {   
                  bulletY -= 5;   
              }   
            if(bulletY <= 0)  
            {
                fired = false;
                bulletSprite.setVisible(false);
            }
        }
        bulletSprite.setRefPixelPosition(bulletX, bulletY);  
        
        
 /**       int rand = rndm.nextInt() % 2;
        
      if(rand == 1)
      {
          if(!invaderfire)
          {
              invaderfire = true;
              int invaderbulletX = invaderSprite.getRefPixelX();
              int invaderbulletY = invaderSprite.getRefPixelY();
              bulletSprite.setRefPixelPosition(invaderbulletX + shipSprite.getWidth() /2, invaderbulletY);
              bulletSprite.setVisible(true);
              manager.insert(bulletSprite, 0);
              
          }
      } */
        
    }  
    
    public void collisionDetection()
    {   
       
        if(bulletSprite.collidesWith(invaderSprite, false))  
        {  
            // invaderSprite.setVisible(false);  
            manager.remove(invaderSprite);
            bulletSprite.setVisible(false);
            fired = false;
            score += 10;
        }
       
    }
    
    public void updateGameScreen(Graphics g)
    {    
        manager.paint(g, 0, 0);
        g.setColor(0, 255, 0);
        g.drawString("Score: " + score, 10, getHeight() - getHeight() + 10, 0);
    }
    
    
    public void setInitialPositions()   
    {   
        //Remember the size of the sprite and the ref pixel is top left   
        shipSprite.setRefPixelPosition(spaceSprite.getWidth() / 2 - shipSprite.getWidth() /2, spaceSprite.getHeight() - 80);   
        shipX = shipSprite.getRefPixelX();   
        shipY = shipSprite.getRefPixelY();   
        
        
        invaderSprite.setRefPixelPosition(invaderSprite.getWidth(), spaceSprite.getHeight()/5);           
        invaderX = invaderSprite.getRefPixelX();  
        invaderY = invaderSprite.getRefPixelY(); 
        
        bulletSprite.setRefPixelPosition(0,0);
        bulletSprite.setVisible(false);
        fired = false;
        
    }
    
    
    public void loadImages()  
    {  
        
        try
        {            //Remember to load the res folder into netbeans            
            spaceImage = Image.createImage("/space.png");            
            shipImage = Image.createImage("/ship.png");            
            invaderImage = Image.createImage("/10.png");   
            bulletImage = Image.createImage("/bullet.png");
            System.out.println("Loaded Images!");        
        }        
        catch(IOException ioex)        
        {            
            System.err.println(ioex+" Error loading images");        
        }
             
    }  
}
Top Expert: keyurkarnik
Expert Since: 02/22/2005
Accepted Solutions: 259
keyurkarnik has been an Expert for 3 years 10 months, during which he has posted 884 comments and answered 259 questions. keyurkarnik is just one of 103 experts in the Java 2 Micro-Edition (J2ME) Zone.
 
 
 
 
20081119-EE-VQP-47 - Hierarchy / EE_QW_3_20080625