ไม่ทราบในเกมส์พวก มาริโอ นี้เขามีวิธีการเช็คยังไงครับ ที่ให้เวลาที่ตัว มาริโอ ไม่ชนอะไรเลยและเดินจนสุดทางเดินแล้วตกลงไปในเหว หรือว่า กระโดดขึ้นไปอยู่บนอิฐแล้ว มันพอเดินเลยที่ไม่มีอิฐแล้วมันตกลงมานะครับ คือตอนนี้ผมเขียนเกมส์แนวนี้อยู่นะครับ กำลังมีปัญหา เรื่องที่กล่าวไปนะครับ ผมลอง ให้มันบวกค่าไปเรื่อง ๆ แล้วรู้สึกว่ามันจะชนกับ tiled แล้วมันเด้งขึ้นลง ไม่หยุดนะ เลยอยากจะรู้แนวคิดรบกวนท่านผู้รู้ด้วยนะครับ ( เออ! เกมส์ที่เขียนเป็นเกมส์บนมือถือนะครับ midp 2.0 (j2me)
นี่เป็นส่วนโคดครับ
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.lang.*;
public class LEVEL01 extends GameCanvas implements Runnable{
private static boolean start;
private static boolean jumpUp;
private static boolean jumpDown;
private static boolean keyStatus;
private static boolean playerStatus;
private static boolean ef,wStatus;
private static final int floor = 208;
private static final int far = 170;
private static Thread runThread;
private static int posX, posY,refPosX, refPosY;
private static int wX,wY,i;
private static byte dir;
private static SpriteEngine playerว
private static TiledLayer gameFloor,brick;
private static LayerManager gLayer,wLayer;
private static int[] map1 = {4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,
4,1,1,1,1,1,1,0,0,0,0,1,1,1,1,4,4,4,4,4,4,4,4,4,4, //พื้นที่ตั้วละครเหยียบอยู่
4,2,2,2,2,2,2,0,0,1,1,2,2,2,0,4,4,4,4,4,4,4,4,4,4};
public LEVEL01(IZA midlet){
super(true);
setFullScreenMode(true);
int[] map2 = {
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0, //Position of car
0,0,0,0,0,0,0,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0};
gLayer = new LayerManager();
wLayer = new LayerManager();
player = new SpriteEngine(midlet.createImage("/mario.png"),17,18);
gameFloor = player.Map(midlet.createImage("/floor.png"),map1,0,163,25,3,15,15);
brick = player.Map(midlet.createImage("/track.png"),map2,0,0,11,11,16,16);
weapon = new SpriteEngine(midlet.createImage("/laser.png"),20,10);
initial();
}
public void initial(){
jumpUp = false;
keyStatus = true;
ef = false;
wStatus = true;
refPosX = posX = 20;
refPosY = posY = (floor -48);
}
public void startApp() {
start = true;
runThread = new Thread(this);
runThread.start();
}
public void pauseApp() {
start = false;
runThread = null;
runThread.yield();
}
public void destroyApp(boolean unconditional) {
start = false;
}
public void run(){
Graphics g = getGraphics();
if(!jumpUp) posY+=2; //ตรงนี้ถ้ากำหนดให้เป็นไม่กระโดดอยู่ให้ตกลงมาเรื่อยๆ ซื่งมีปัญหาครับคือมันเด้งขึ้นลงไปเรื่อย ๆ
while (true){
keyPressed();
jump();
paint(g);
try{Thread.sleep(40);}
catch(InterruptedException e){}
}
}//End Method Run
public void checkCollides(int key){
int[] map = this.map1;
if (player.collidesWith(gameFloor, false) | player.collidesWith(brick,false)){
posX = (refPosX+1);
posY = refPosY;
}
if (!player.collidesWith(gameFloor,false) & !player.collidesWith(brick,false)){
refPosY = posY;
refPosX = posX;
}
}//End Check collide
public void keyPressed(){
int key = getKeyStates();
checkCollides(key);
weapon(key);
if(keyStatus){
switch(key){
case UP_PRESSED: player.setFrame(5);
player.nextFrame();
player.setFrame(5);
jumpUp = true;break;
case RIGHT_PRESSED : player.nextFrame();
if(player.getFrame()>4) player.setFrame(0);
posX+=3;
dir = 1;
player.setTransform(Sprite.TRANS_NONE);
break;
case LEFT_PRESSED : player.nextFrame();
if(player.getFrame()>4) player.setFrame(0);
posX-=3;
dir = 0;
player.setTransform(Sprite.TRANS_MIRROR);
break;
case GAME_A_PRESSED: posY-=2;break;
default :;break;}
}//If condition check key Status
}//End Method keyPressed
public void paint(Graphics g){
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
player.setPosition(posX,posY);
weapon.setPosition(wX,wY);
gLayer.append(player);
gLayer.append(gameFloor);
gLayer.append(brick);
gLayer.setViewWindow(0,0,getWidth(),getHeight());
gLayer.paint(g,0,0);
wLayer.paint(g,0,0);
g.setColor(0xfff00f);
g.drawString(" posX= "+posX+" PosY= "+posY,0,0,g.TOP|g.LEFT);
g.drawString(" refX= "+refPosX+" refY= "+refPosY,0,20,g.TOP|g.LEFT);
//g.drawString("FrameSeq= "+player.getFrame()+" Key status= "+keyStatus,0,20,g.TOP|g.LEFT);
//g.drawString("UP= "+jumpUp+" DOWN= "+jumpDown,0,35,g.TOP|g.LEFT);
flushGraphics();
}
รบกวนขอแนวคิดด้วยนะครับ


Reply With Quote
