Advertisement

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

J2ME Game Canvas, Use Sprite Multiple Times

Asked by Rocker4500 in Java 2 Micro-Edition (J2ME), Game Programming, Game Programming User Interface

Tags: ,

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
GaryStart Free Trial
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");        
        }
             
    }  
}
 
Loading Advertisement...
 
[+][-]12.05.2008 at 09:44AM PST, ID: 23106807

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 7-day free trial to view this Expert Comment or ask the Experts your question.

 
 
Loading Advertisement...
20080716-EE-VQP-32 - Hierarchy / EE_QW_3_20080625