กดปุ่มพร้อมกัน

ปัญหาก็คือว่า
สามารถตรวจสอบได้ครั้งละ 1 ปุ่ม

ความต้องการของผม
ก็คือว่า ไม่ว่ากดปุ่ม Z ก่อนหรือหลังปุ่มลูกศร ก็ให้ฟังชันของปุ่มที่กดยังคนทำงานอยู่

เท่าที่ผมอ่านๆ มาผมว่าน่าจะตรวจสอบด้วยตัวแปรบางตัวที่เอาไว้ใช้เก็บค่าสถานะการกดปุ่ม
ว่า ถ้าปุ่มนี้ถูกกดอยู่ สถานะของมันต้องเป็น true
ว่า ถ้าปุ่มนี้ไม่ได้ถูกกดอยู่ สถานะของมันต้องเป็น false

// เลยประกาศตัวแปรสำหร้บเก็บค่าสถานะ
var keyarrowLeft = false;
var keyarrowUp = false;
var keyarrowRight = false;
var keyarrowDown = false;
var Speed = 2;

พอจะตรวจสอบว่า ในขณะที่เรากดปุ่ม Z ปุ่มลูกศร บน ล่าง ซ้าย ขวา ได้ถูกกดอยู่ก่อนหรือไม่

if(keyarrowLeft==true||keyarrowUp==true||keyarrowRight==true||keyarrowDown==true)

ตัวใดก็ตามที่มีค่าเป็น true
Speed จึงจะถูกบวกเพิ่ม

เป็นทำงานได้ในระดับนึง แต่ก็ยังไม่ลื่นไหล เพราะว่า

สมมุติว่าผมกดปุ่ม ลูกศรซ้าย ตอนนี้ ค่าของ keyarrowLeft = true;
แล้วกดปุ่ม Z Speed ถูกบวกเพิ่มถูกต้อง

ตอนนี้การทำงานไปอยู่ที่ปุ่ม Z อย่างเดียว
การทำงานของปุ่มลูกศรซ้ายไม่ทำงานทั้งๆ ที่กดอยู่
ค่าของ keyarrowLeft จะ = false; ก็ต่อเมื่อปล่อยปุ่มแล้วเท่านั้น

ถ้ากดปุ่ม Z ก่อน ฟังชันของปุ่ม Z ยังไม่ทำงาน
แล้วกดปุ่ม ลูกศรซ้าย ฟังชันของปุ่ม ลูกศรซ้าย ทำงาน
พอฟังชันของปุ่ม ลูกศรซ้าย ทำงาน ฟังชันของปุ่ม Z ก็ทำงานตาม

ความต้องการของผม
ก็คือว่า ไม่ว่ากดปุ่ม Z ก่อนหรือหลังปุ่มลูกศร ก็ให้

โค้ดของผมเป็นดังนี้ี้

// ประกาศตัวแปรสำหร้บตรวจสอบสถานะ
var keyarrowLeft = false;
var keyarrowUp = false;
var keyarrowRight = false;
var keyarrowDown = false;
var Speed = 2;

document.onkeydown = checkKeyDown; // หากกดปุ่มให้เรียกฟังชั่น checkKeyDown ทำงาน
document.onkeyup = checkKeyUp; // หากปล่อยปุ่มให้เรียกฟังชั่น checkKeyUp ทำงาน

function checkKeyDown(e){
 var keycode;
 if(!e){ // หาเป็น IE
  keycode=window.event.keyCode;
 }else if(e){ // หากเป็น Firefox
  keycode = e.which;
 }
 if(keycode==37){ // ลูกศรซ้าย
  keyarrowLeft = true;
  ......................
 }
 if(keycode==38){ // ลูกศรขึ้น
  keyarrowUp = true;
  ......................
 }
 if(keycode==39){ // ลูกศรขวา
  keyarrowRight = true;
  ......................
 }
 if(keycode==40){ // ลูกศรลง
  keyarrowDown = true;
  ......................
 }
 if(keycode==90||keycode==122){ // ปุ่ม Z
  if(keyarrowLeft==true||keyarrowUp==true||keyarrowRight==true||keyarrowDown==true){
   if(Speed<4){
    Speed++;
   }
  }
 }
}

function checkKeyUp(e){
 var keycode;
 if(!e){ // หาเป็น IE
  keycode=window.event.keyCode;
 }else if(e){ // หากเป็น Firefox
  keycode = e.which;
 }
 if(keycode==37){ // ลูกศรซ้าย
  keyarrowLeft = false;
 }
 if(keycode==38){ // ลูกศรขึ้น
  keyarrowUp = false;
 }
 if(keycode==39){ // ลูกศรขวา
  keyarrowRight = false;
 }
 if(keycode==40){ // ลูกศรลง
  keyarrowDown = false;
 }
 if(keycode==90||keycode==122){ // ปุ่ม Z
  Speed = 2;
 }
}

 

10 ก.พ. 2552 3 2,917

ถ้าเป็นแนวนี้มันจะได้มั๊ย

 if(keycode==37){ // ลูกศรซ้าย
   ......................
   ......................
  if(keycode==37&&keycode==90||keycode==37&&keycode==122){ // ปุ่ม Z
    if(Speed<4){
     Speed++;
    }
   }
   ......................
   ......................
 }
#1

ได้ลองยังล่ะ ถ้าไม่ได้ อาจต้องใช้ dom ระดับ 2 คือการ ดักอีเวนต์ ด้วยฟังก์ชั่น addEventListener() ลองดูนะครับ หรือไม่ก็อาจต้องใช้พวก Frame Work ช่าวย
#2

ก็ยังไม่สำเร็จ T-T
ขอบคุณ คุณอาฮ่ะ :)

ความท้าทายมันอยู่ที่ความ ซีเครียด (ซีเรียส) นี่แหล่ะ
ยิ่งเครียดมาก ก็แสดงว่ายิ่งท้าทายมาก (จริงอ่ะ เหรอ ?)
เพราะฉะนั้น กลับไปเครียดต่อ .........................


#3
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^