PDA

View Full Version : มีปัญหาเรื่องการกระโดดในเกมส์ครับ(code)



Anonymous
09-09-2004, 03:13 PM
รบกวนพี่ ช่วยดูโค้ดกระโดให้ผมหน่อยครับ มันไม่ค่อยจะ work นะ อยากจะรู้หลักการนะ(แนวคิด) ว่าเขาทำอย่างไรกันนะ ครับ ส่วนโค้ดมีปัญหาตรงที่ พอเวลากระโดดไปแล้ว พอกดปุ่มไปหน้ามันจะมีอาการแปลก ๆ นะ มันไม่เหมือนกับกระโดดแล้วกดปุ่มไปหน้าเหมือนเกมส์ทั่วไปนะครับมันทื่ อ ๆๆ มากเลย (ผมเขียนด้วย j2me midp2.0 นะครับ)
รบกวนด้วนนะครับ ขอบคุณมาก ครับ

private void input() {
int key = getKeyStates();
if(key == UP_PRESSED){
isJump = true;
jumpUp = true;
}

if(lock == true){
if(key == RIGHT_PRESSED){
if(posX<getWidth()){
posX+=5;
}
}
if(key == LEFT_PRESSED){
if(posX>0){
posX-=5;
}
}
}
}
private void jump() {
int jumpHeight = 60;

if(isJump) {

if(posY <= 196 - jumpHeight) { // ถ้ากระโดดถึงจุดสูงสุดแล้ว ให้หยุดแล้วเปลี่ยนเป็นลงแทน
jumpUp = false;
}

if(jumpUp){
posY -= 2;
}
else {
posY += 2;
}

if(posY+15>= 152) { // ถ้าตำแหน่งในแกน y ของ วัตถุเท่ากับ จุดเริ่มต้นกระโดด คือ กระโดดลงแล้ว ให้ หลุดออกจาก loop กระโดด
isJump = false;
lock = true;
}

}
}

labyrinth
09-09-2004, 06:49 PM
อันนี้ต้องใช้สมการทางฟิสิกส์เข้าช่วย
v = u + a*t
s = u*t + 0.5*a*t*t


ก็กำหนดความเร็วต้นเป็นค่าค่าหนึ่ง แล้วก็คำนวณตามสมการทั้งแกน x และ y (z) ก็จะได้ระยะทางหรือพิกัดตำแหน่งที่ต้องการ อาจจะต้องมีการปรับค่า u, a ตามความเหมาะสม

Anonymous
10-09-2004, 01:14 PM
ถ้าจำไม่ผิด ใน j2me มันไม่มีเลขทศนิยมไม่ใช่เหรอครับ ??

labyrinth
10-09-2004, 02:46 PM
ใน j2me ไม่มี floating point ก็จริงแต่เราสามารถทำเลียนแบบขึ้นมาได้โดยใช้ Fixed point เป็นการ fix ค่า base (Matissa หรือเปล่าหว่า?)
เช่น ถ้ากำหนดให้เป็นค่า 8 เวลาแปลงค่าก็แค่ left shift ไป 8 ที

ฐาน 10 => Fixed 8
1 => 1 << 8 = 256
0.5 => 1 << 7 = 128
3 => 3 << 8 = 3*256
-----------------------
เวลาต้องการแปลงกลับก็ right shift ไป 8 ที

Arithmetic Operation
+ - ทำตามปกติ = A + B
* = (A*B) >> 8
/ = (A<<8)/B

ทั้งนี้ทั้งนั้นต้องระวัง overflow ในตอนคูณและหาร และการกลับเครื่องหมายในตอน บวกและลบ

มันเป็นเรื่องที่ควรรู้ในการเขียนเกม...