Ludziska, proszę was o pomoc, bo za chiny ludowe nie mogę rozgryźć tego strzelania. Poszperałem po internecie i wiem, że na pewno trzeba utworzyć nową klasę, utworzyć piksel referencyjny oraz poruszanie się po x lub y zależnie od kierunku sprite'a. Ale jak to zrobić to nie mam zielonego pojęcia. jakby co to mogę przesłać kod źródłowy całego programu.
package pkgGame;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
public class clsCanvas extends GameCanvas implements Runnable {
public static final int keyDelay = 250;
//stale dla klawiszy
public static final int upKey = 0;
public static final int leftKey = 1;
public static final int downKey = 2;
public static final int rightKey = 3;
public static final int fireKey = 4;
private boolean[] isDown = {
false, false, false, false, false
};
private long[] keyTick = {
0, 0, 0, 0, 0
};
private int[] keyValue = {
GameCanvas.UP_PRESSED, GameCanvas.LEFT_PRESSED,
GameCanvas.DOWN_PRESSED, GameCanvas.RIGHT_PRESSED,
GameCanvas.FIRE_PRESSED
};
private boolean isRunning = true;
private Graphics g;
private midMain fParent;
//private Image imgBG;
//private Image imgMenu;
//stores the focused menu item
//private int menuIndex = 0;
private static final int FRAME_WIDTH = 20;
private static final int FRAME_HEIGHT = 20;
private Image imgCzolg;
private Sprite Czolg;
private int czolgSpeed = 2;
private Image imgTileset;
private TiledLayer roadMap;
private TiledLayer blockMap;
private int x_pos;
private int y_pos;
private Bullet Pocisk;
private Image imgPocisk;
public clsCanvas(midMain m) {
super(true);
fParent = m;
setFullScreenMode(true);
}
public void start(){
Thread runner = new Thread(this);
runner.start();
}
public void loadRoadMap(){
//wywołanie drogi
roadMap = new TiledLayer(12, 16, imgTileset, 20, 20);
//pętla dla drogi
for (int y = 0; y < 16; y++){
for (int x = 0; x < 12; x++){
// ustawienia indeksu dla drogi
roadMap.setCell(x, y, 2);
}
}
}
public void loadBlockMap(){
// macierz bloków
byte[][] blockData = {
{11, 11 , 11 , 11 , 11, 11 , 11 , 11 , 11 , 11, 11,11 },
{11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,11},
{11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,11},
{11 , 0 , 0 , 10, 10 , 0 , 0 , 10 , 0 , 0 , 0,11},
{11 , 0 , 0 , 9 , 0 , 0 , 0 , 9 , 9 , 9 , 0,11},
{11 , 0 , 0 , 10 , 0 , 0 , 0 , 10 , 0 , 0 , 0,11},
{11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,11},
{11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,11},
{11 , 0 , 0 , 0, 0 , 0 , 0 , 0, 0 , 0 , 0,11},
{11 , 0 , 0 , 0, 0, 0 , 0 ,0 , 0 , 0 , 0,11},
{11 , 0 , 0 , 0 , 10 , 10 ,10 , 0 , 0 , 0 , 0,11 },
{11 , 0 , 0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 ,11},
{11 , 0 , 0 , 0, 0 , 0 ,0 , 0 , 0, 0 , 0,11 },
{11 , 0 , 0 , 0, 9 , 9 , 9 , 0 , 0, 0 , 0 ,11},
{11 , 0 , 0 , 0, 10, 8 , 10 , 0 , 0, 0 , 0 ,11},
{11 , 11 , 11 , 11, 11 , 11 , 11 , 11 , 11, 11 , 11 ,11}
};
//inicjacia bloków
blockMap = new TiledLayer(12, 16, imgTileset, 20, 20);
for (int y = 0; y < 16; y++){
for (int x = 0; x < 12; x++){
blockMap.setCell(x, y, blockData[y][x]);
}
}
blockData = null;
}
public void load(){
try{
// ładowanie obrazów
// imgBG = Image.createImage("/images/tlo.png");
//imgMenu = Image.createImage("/images/menuitems.png");
// ładowanie kafelków
imgTileset = Image.createImage("/images/kafelki.png");
imgCzolg = Image.createImage("/images/czolg2.png");
imgPocisk = Image.createImage("/images/bullets.png");
}catch(Exception ex){
isRunning = false;
return;
}
// inicjacia "duszków"
Czolg = new Sprite(imgCzolg, 20, 20);
Czolg.setRefPixelPosition(20/2, 20/2);
Czolg.setFrame(0);
// ustawienie pozycji
Czolg.setPosition(20, 20);
loadRoadMap();
loadBlockMap();
}
public void unload(){
// niszczenie obiektów
//imgMenu = null;
//imgBG = null;
blockMap = null;
roadMap = null;
imgTileset = null;
imgCzolg = null;
Czolg = null;
}
public void checkKeys(int iKey, long currTick){
long elapsedTick = 0;
for (int i = 0; i < 5; i++){
// klawisz nie został naciśnięty
isDown[i] = false;
// urzytkownik nacisną klawisz
if ((iKey & keyValue[i]) != 0){
elapsedTick = currTick - keyTick[i];
if (elapsedTick >= keyDelay){
// zapisz obecny czas
keyTick[i] = currTick;
isDown[i] = true;
}
}
}
}
/*public void drawMenu(Graphics g){
int cy = 0;
for (int i = 0; i < 5; i++){
cy = 64 + (i * 22);
g.setClip(47, cy, 82, 20);
if (menuIndex == i){
g.drawImage(imgMenu, 47, cy - 20, Graphics.TOP | Graphics.LEFT);
} else {
g.drawImage(imgMenu, 47, cy, Graphics.TOP | Graphics.LEFT);
}
cy += 6;
g.setClip(47, cy, 82, 8);
g.drawImage(imgMenu, 47, cy - (40 + (i * 8)), Graphics.TOP | Graphics.LEFT);
}
}*/
public void run() {
int iKey = 0;
long lCurrTick = 0;
load();
g = getGraphics();
while(isRunning){
lCurrTick = System.currentTimeMillis();
iKey = getKeyStates();
checkKeys(iKey, lCurrTick);
/* if (isDown[upKey]){
if (menuIndex > 0){
menuIndex--;
} else {
menuIndex = 4;
}
} else if (isDown[downKey]){
if (menuIndex < 4){
menuIndex++;
} else {
menuIndex = 0;
}
} else if (isDown[fireKey]){
if (menuIndex == 4){
isRunning = false;
}
}*/
g.setClip(0, 0, getWidth(), getHeight());
//rysowanie logo
// g.drawImage(imgBG, 0, 0, Graphics.TOP | Graphics.LEFT);
//rysowanie menu
// drawMenu(g);
// pobranie pozycji czołgu
int cx = Czolg.getX();
int cy = Czolg.getY();
//pobranie zmiennych
int tx = cx;
int ty = cy;
if ((iKey & GameCanvas.UP_PRESSED) != 0){
// czołg patrzy do góry
Czolg.setFrame(1);
// czołg jedzie do góry
cy -= czolgSpeed;
} else if ((iKey & GameCanvas.DOWN_PRESSED) != 0){
// czołg patrzy na dół
Czolg.setFrame(0);
// cołg jedzie na dół
cy += czolgSpeed;
} else if ((iKey & GameCanvas.LEFT_PRESSED) != 0){
// czołg patrzy w lewo
Czolg.setFrame(2);
// mczołg jedzie w lewo
cx -= czolgSpeed;
} else if ((iKey & GameCanvas.RIGHT_PRESSED) != 0){
// czołg patrzy na prawo
Czolg.setFrame(3);
// czołg jedzie w prawo
cx += czolgSpeed;
}
if ((iKey & GameCanvas.FIRE_PRESSED) != 0)
{
//tu należy wpisać klasę pocisku
}
// pobieraj pozycję czołgu
Czolg.setPosition(cx, cy);
//ustalanie kolizji między czołgiem a klockiem
if (Czolg.collidesWith(blockMap, true)){
//ustawienia początkowej pozycji czołgu po uderzeniu w blok
Czolg.setPosition(tx, ty);
}
/*
g.setClip(0, 0, getWidth(), getHeight());
g.setColor(0xffffff);*/
g.drawString(Integer.toString(iKey), 2, 2, Graphics.TOP | Graphics.LEFT);
//rysuj drogę
roadMap.paint(g);
//rysuj bloki
blockMap.paint(g);
// rysuj duszka
Czolg.paint(g);
flushGraphics();
try{
Thread.sleep(30);
} catch (Exception ex){
}
}
g = null;
unload();
fParent.destroyApp(false);
fParent = null;
}
}
Przy okazji przepraszam, że piszę post pod postem, ale nie znalazłem nic na ten temat więc jeśli popełniłem błąd to następnym razem to się nie powtórzy.