อนุบาลงาน ActionSctipt

เริ่มโพสต์โดย ej_sing, 10 พ.ย. 2007, 00:44 น.

0 สมาชิก และ 1 บุคคลทั่วไป กำลังเปิดอ่านโพสต์นี้

ej_sing

#330
จารย์ก่อครับ ขอเรื่อง hitTest เนียนๆง่ายๆหน่อยสิครับ ผมไม่ค่อยสันทัดครับ   :40:  อย่าเพิ่งไป class นะ

อย่างเช่นวัตถุชนกัน , เล่นกับ shape ด้วยน่ะครับ

:46: ขอบคุณครับ จะเขียนเองแต่...ไม่ค่อยรู้เรื่องเลย   :42:



// ลองทำดู ไอ้ shapeFlag มันไม่มีผลเลยอ่ะ
// มันมีผลแค่ตัวเดียว อีกตัวไม่มีผลแฮะ
เช่น ตัวนึงลากไปโดน ต้องเลือกว่าจะ  shapeFlag กับตัวไหนรึไงครับ มันเล่นเชปกับทั้งตัวไปโดน ตัวยอมโดน ได้ไหม
หรือว่าต้อง เอา getBounds อะไรนั่นมาช่วยด้วย  :44: หนูยังไม่เคยค่ะ แนะนำด้วยนะคะ

ej_sing

#331
ขอเบิ้ลนะ
ไปลองเล่นกับ hitTest ง่ายๆมานิดหน่อย เลยทำเกมส์มาให้เล่น

ตัวเกมส์นี้ยังมั่วๆอยู่บ้างนะครับ คิดไปทำไป เพิ่มนิด เพิ่มหน่อย แก้นู่นแก้นั่น ไม่ได้คิดไว้ก่อน
สคริปเลยเยอะเพียบไปหมด  ( เขียนตัวจับเวลาแล้วเอ๋ออีกต่างหาก เลยต้องยืมเขามา )

ใช้โค้ดพื้นฐานง่ายๆ
แต่ตัวนี้เวอร์ชั่นง่าย เพราะเวลาเช็คชนขอบ จะเป็นจุดกลางของลูกกลม กับเส้นขอบเท่านั้น จะมีพื้นที่เยอะก่อน hitTest จะทำงาน
ตัวยากยังทดลองอยู่ จะลองตั้งจุดเช็คการชนรอบๆวงกลมสัก 8 จุด ทีนี้ยากนรกเลย


หลักการทำงานก็ เช็คการชนกันระหว่าง เส้นขอบกับ ลูกกลม ด้วย mouseListener.onMouseMove
แต่ผมเพิ่มการเช็คอีกชั้นด้วยพื้นที่ภายใน ( b/ground ของทางวิ่ง ) กับลูกกลมด้วย (คือเช็คกันลากออกนอกทางด้วย )
พอลากออกนอกทางเร็วๆแล้ว ชั้นเดียวมันเหมือนทำงานไม่ทัน เลยซ้อนสองชั้น ซึ่งยอมรับว่ามั่วหน่อย
ถ้าชน ก็รันฟังชั่นต่างๆ ให้ทำอะไรก็ว่าไป ง่ายๆน่ะครับ

โค้ดไว้ก่อนนะ ...เยอะ อธิบายไม่ไหว
อย่าลืมเซฟเวลามาดูกันมั่งนะ  :33: ช่วยหาแมลงด้วยนะครับ
// สามารถปล่อยเม้าส์เพื่อพักมือได้นะครับ แต่เวลาไม่หยุดนะเอ้า


THE WAY ... ทางนรกไม่หมกเม็ด by ej_sing  ... ลุยโลด  :07: 

http://img3.f0nt.com/flash/878f657a4f7c830bfbfa442664251c1e.swf

ใครอยากให้อธิบายโค้ด ขอมานะครับ ว่างๆจะมาอธิบาย ( บองตรงๆว่าโค้ดผมห่วยหน่อยนะครับ สุยทำไปเรื่อยๆ ไม่ได้คิดล่วงหน้า)


// ผมเล่นไม่เคยผ่านเลยว่ะครับ   :08:  ....โทษเมาส์ไม่ดี  :37:

จักรี

ล้ำลึกคนึงหาในดวงจิต ใจเคยคิดตัดสวาทมิอาจสิ้น
ดั่งก้านบัวหักกลางชลาสินธุ์ ผิว่าสิ้นไร้เยื่อยังเหลือใย

ej_sing

#333
 :38: เอาจริงรึ มันห่วยนะ  :08:  พอเป็นแนวทางละกันนิ
// ลบอโค้ดไม่เกี่ยวออกเกือบหมดแล้ว
เริ่มเลยนะ

อ้างอิง

stop();
var shapeFlag = true;   
finish_mc._visible = false;   // อันนี้เป็น มูวี่ตอนจบ เอามันมาหลบไว้ก่อน ( จริงๆจะใช้ attach แต่ขี้เกียจ)

var mouseListener:Object = new Object();     // สร้าง event ตรวจจับการชน
mouseListener.onMouseMove = function() {
   if (_mc2.hitTest(_mc._x, _mc._y, shapeFlag)) {  // หากชนกับเส้นขอบ ให้รันฟังค์ชั่น out()
      out();
   }
   if (!area.hitTest(_mc._x, _mc._y, shapeFlag)) {  // เช็คขั้นที่สอง หากออกนอกทาง ให้รันฟังค์ชั่น out()
      out();
   }
   if (finish_area.hitTest(_mc._x, _mc._y, shapeFlag)) {  // หากถึงเส้นชัย ใหรันฟังค์ชั่น finish()
      finish();
   }
   updateAfterEvent();
};
Mouse.addListener(mouseListener);



ที่ใช้ Listener เพราะเราเล่นเกมส์ด้วยการลากเม้าส์อยู่แล้ว เลยไม่ต้องใช้ enterFrame มาทำ event ในการตรวจการชน


ส่วนนี้คือ ลาก _mc เพื่อเล่นเกมส์
อ้างอิง
_mc.onPress = function() {
   this.startDrag();
   clockStart();                                     // ลากปั๊ป จับเวลาปุ๊ป
};

_mc.onRelease = function() {
   this.stopDrag();                              //เหนื่อยก็พัก ปล่อยเม้าส์ได้
};


ส่วนฟังค์ชั่นหลักๆ ก็ง่ายๆเลยครับ
เมื่อรันฟังค์ชั่นนี้ ก็จะ..
อ้างอิง
function out() {
   clockStop();                                             // หยุดเวลาไว้
   _mc.stopDrag();                                     // หยุดลาก
   Mouse.removeListener(mouseListener);     //ลบ event การตรวจจับการชน
   _mc.gotoAndStop(2);                              // แสดงภาพระเบิด
   delete _mc.onPress;                              // กันการลากต่อ ด้วยการลบ onPress ซะเลย
   over_mc.gotoAndPlay(2);                        // แสดง มูวี่เกมส์โอเวอร์ มีปุ่มเริ่มใหม่อยู๋ข้างใน
}

// วิธีเริ่มใหม่คือ _root.gotoAndPlay(1) เพื่อรีเซ็ท ( แบบง่ายๆ ) // มั่วโคตรๆ
ผมปล่อยไทม์ไลน์หลักให้ไหลไปห้าเฟรมแล้วค่อยหยุดเพราะตัวเกมส์ และสคริปอยู่เฟรม 5



// อันนี้ฟังค์ชั่นเมื่อเล่นจบ

function finish(){
   _mc.stopDrag();                                          // หยุดลาก
   Mouse.removeListener(mouseListener);        //ลบ event การตรวจจับการชน
   delete _mc.onPress;                                   // กันการลากต่อ ด้วยการลบ onPress ซะเลย
   finish_mc._visible = true;                           // แสดง มูวี่เกมส์จบ มีปุ่มเริ่มใหม่อยู๋ข้างใน
   clockStop();                                          // หยุดเวลาไว้
   finish_mc.ftime_txt.text = total_time;        // อันนี้แสดงเวลาที่เล่นจบ โดยดึงค่าจากตัวจับเวลามา
}




ส่วนแรก _mc2 ที่ทำเป็นเส้นขอบห้มาลากมาชน เป็น shape นะครับ ไม่ใช่ line




ส่วนอันนี้เป็น พื้นที่ด้านใน เอากันไว้ว่า ไม่ให้ลากออกนอกพื้นที่นี้



จริงๆหลักๆก็มีแค่นี้ครับ


จบครับ ............. เรื่องตัวจับเวลาไม่ขอกล่าวนะครับ ยืมเว็บนี้มา _http://www.gieson.com/Library/projects/utilities/stopwatch/

iannnnn

ต้องกดซูมเล่นถึงจะรอด :30: (แต่ก็ตายปลายทาง)

Soris0ri

Las Noches Rubicundior

Layiji

57 วิครับ ใช้เมาส์ปากกาซะเลย :27:
นักเขียนการ์ตูนรายปี

จักรี

ล้ำลึกคนึงหาในดวงจิต ใจเคยคิดตัดสวาทมิอาจสิ้น
ดั่งก้านบัวหักกลางชลาสินธุ์ ผิว่าสิ้นไร้เยื่อยังเหลือใย

poloh

เจ๋งเลยครับพี่ ผมยังไม่เคยเล่นกับ hittest เลย
ก่อสร้างกับทำลาย เหมือนที่ลงมือ ต่างที่การกระทำ

oottee

#339
โชว์ซะหน่อย เล่นครั้งแรก ครั้งเดียวผ่านเลยนะ
แต่ปล่อยมือ ไป 5 ครั้ง ถอยหลัง 2 มิล ไป 1 ครั้ง


ej_sing


ณัฏฐ์

#341


:47:

คลิกซ้าย 1 ที ขวา 1 ที มาคลิกซ้ายในวง GOAL

ej_sing

 :38: เฮ้ยยยย ทำได้ไง
.....มีบั๊กอีกแล้ว ( ประจำ )

มาเฉลยด้วยนะครับ  :05:

ณัฏฐ์

มีนวลอยู่ครับ


คลิกซ้าย 1 ที ขวา 1 ที ลากออกมาคลิกซ้ายในวง GOAL
สั่งห้ามคลิกขวาไปเลยครับ  :30:

กากก่อเกรียนนู้บ

ห้ามคลิกขวาไม่ได้ครับ  :08:

ผมมาช้าไปเหรอเนี่ย ขอโทษครับ น้าแอ๊ด  :05:
(วันที่ 9 ผมอยู่ กทม. น่ะครับ ไม่ได้เข้าบอร์ดเลย)

มีทริคจำง่ายอยู่อันนึงครับ

shapeFlag เป็น false เอาไว้เช็ค วัตถุ กับ วัตถุ
shapeFlag เป็น true เอาไว้เช็ค จุด กับ วัตถุ

น้าแอ๊ดลองเปลี่ยนจากจับลาก ให้เป็นวิ่งตามเมาส์สิครับ ผมว่า โกงยากกว่าเดิม.. (รึเปล่า)

SMF 2.1.7 © 2026, Simple Machines