อนุบาลงาน ActionSctipt

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

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

ej_sing

#60
อ้างคำพูดจาก: ซ้อซั้ว เมื่อ 13 ธ.ค. 2007, 14:18 น.

ลุงแอ๊ดครับ ที่ว่า trace ไม่แสดงผลที่อื่นเนี้ย

แต่มันรันด้วยรึเปล่าครับ ประมาณว่ากิน cpu เราไปด้วยใช่มั้ยครับผม  :46:

ไม่แน่ใจครับ แต่น่าจะมีผลนะ เพราะเวลารัน ยังไงๆมันก็ผ่านบรรทัดที่เราเขียนนี่นะ
แต่ทางที่ดี ตามหลักสคริปที่ถูกที่ควร น่าจะลบไปครับ เพื่อ optimise สคริป
หรือคอมเม้นท์ไว้ด้วย "//" หรือ " /* xxx */ " หากไม่อยากลบ (เผื่อเอาไว้เช็คตอนแก้งาน)


ยุนเอ

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

ej_sing

ต่อ..

Convert to Symbol & Instance

Symbol ในแฟลชคงหมายถึง ต้นแบบ (ประมาณนั้นในความคิดผม)
เมื่อเราทำ object ใดๆ ให้เป็น symbol แล้วนั้น
ตัว symbol จะเข้าไปอยู่ใน Library
เราสามารถ ดึง symbol หรือ ต้นแบบนี้มาใช้ใด้ โดยไม่ต้องสร้างใหม่ (งานต่องานนะ แต่สามารถดึงไปใช้ได้)
โดยเมื่อดึงจาก symbol มาแล้วนั้น ตัวที่ดึงมา จะถูกเรียกว่า instance

ลองทดสอบดูโดย

- วาดสี่เหลี่ยม หนี่งอัน
- คลิกที่สี่เหลี่ยม กด F8

เราจะเห็น...



เราจะเห็นว่ามีให้เลือก 3 type คือ


  • Movie clip - เรียกย่อๆว่า mc คิดง่ายๆ เหมือนเราสร้างคลิบวีดีโอขึ้นมาชิ้นหนึ่ง ซึ่งในนั้นจะมี ไทม์ไลน์ ของตัวเอง
  • Button - ปุ่ม คือ... มันเป็นปุ่มน่ะ ในนี้จะมีแค่ สี่เฟรม คือ เฟรม แสดงผล,เม้าส์มาแตะ,กดปุ่ม,ขอบเขต แสดงผลแต่ละเฟรมแบบออโต้
  • Graphic - คล้าย mc แต่คุณสมบัติมีความแตกต่างนิดหน่อยและน้อยกว่า mc

ในที่นี้ ผมจะเน้นที่ mc กับปุ่มนะ ไม่เน้น Graphic (ไม่ค่อยใด้ใช้น่ะครับ ใช้แต่ mc ใครมาอธิบายความต่างหน่อย)

เอาเป็นว่า ทำเป็น mc ก่อนละกันนะ  :39:
เราก็จะใด้ mc มาหนึ่งตัวแล้วใช่มั๊ย
ทีนี้ลอง ลบ mc ที่อยู่บน stage ไปเลยครับ

- แล้วกด Ctrl+l เปิด ไลแบรี่ เราจะเห็น symbol ที่เราสร้างไว้ครับ
- ทีนี้ลากมาวาง ที่ stage เยอะๆ หลายๆตัวเลย
- เลือกอันใดอันหนึ่ง ดับเบิ้ลคลิกเข้าไป
เราก็จะเข้าไปแก้ไขต้นแบบกันล่ะ



ลองดัดๆ ตัดๆ ต่อๆ แล้วดูผล




จะเห็นได้ว่า instance ทุกตัวที่ลากไปวาง เปลี่ยนไปตามต้นแบบทั้งหมด

กลับไปที่หน้ารูท หรือ stage ที่ปุ่ม Scene 1 (ตรงนี้จะบ่งบอกว่า ตอนนี้เราอยู่ที่ไหน เช่น ใน mc ใน bt ฯลฯ)





คงพอเข้าใจนะครับ

มากกว่านี้คงจะต้องโดนย้ายไปกระจู๋ อนุบาลแฟลชแน่ๆ เพราะยังไม่เข้าเรื่องสคริปเลย  :08:

เอาล่ะกว่าจะเข้าเรื่อง  :22:  มาเขียนสคริปลั่งงานตำแหน่ง mc กันดีกว่า

คุณสมบัติ หรือ property ของ instance 
ที่ใช้บ่อยๆแรกเริ่มคือ (เอาแค่นี้ก่อนนะ  :22: )
คือเกี่ยวกับ พิกัด ขนาด transparent สเกล อันนี้แบบรวมๆ ใช้กันได้หมด

อ้างอิง
_alpha : The alpha transparency value of the movie clip.

_height : The height of the movie clip, in pixels.

_width : The width of the movie clip, in pixels.

_x : An integer that sets the x coordinate of a movie clip relative to the local coordinates of the parent movie clip.

_xscale : Determines the horizontal scale (percentage) of the movie clip as applied from the registration point of the movie clip.

_y : Sets the y coordinate of a movie clip relative to the local coordinates of the parent movie clip.

_yscale : Sets the vertical scale (percentage) of the movie clip as applied from the registration point of the movie clip.


เอาล่ะนะ

เราจะเขียนสคริปที่เฟรมกัน  :27: 

ก่อนอื่น ต้องตั้งชื่อก่อน
ในที่นี้ชื่อ mc_mc

คลิกที่เฟรม กด F9 เปิด panel action
พิมพ์ลงไปว่า

อ้างอิง
_root.onMouseDown = function() {
   mc_mc._x = _xmouse;
   mc_mc._y = _ymouse;
};


แล้วกด Ctrl+enter ดูผลลัพธ์ แล้วลองกดเม้าส์ดู
อธิบายสคริปได้ว่า
" เมื่อกดเม้าส์ ให้ ตำแหน่ง x y ของ mc เท่ากันกับตำแหน่งของเม้าส์ "

http://img2.f0nt.com/flash/dfca653d24543ad0e789f93982160d69.swf

ลองทำตามครับ เดี๋ยวจะมาอธิบายสคริปแบบละเอียด

จักรี

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

iannnnn


จักรี

มันอยุ่ในระดับที่ผม ไม่รู้และรู้ได้ไม่ยากจริงๆครับ  จัดมาอีกก็ขอบวกอีกไม่มีอะไรจะตอบแทนได้นอกจากขอบคูณ  :21:


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

เกดลดา

สุดยอดเลยค่ะน้าแอ๊ด เดี๋ยวเกดลองไปทำเล่นดูค่ะ สนุกจัง+ ขอบคุณที่ให้ความรู้ค่ะ  :46:
กินทุกอย่างยกเว้นต้นหอมค่ะ

ej_sing

ต่อ..โอ๊ยยฟิตชิบเป๋งเลย  :22:

จากตัวอย่างที่แล้ว เราจะเพิ่มตัวแสดงผลพิกัดง่ายๆโดยใช้ text box

- เลือก text tool



- วาดลงไปที่ stage แล้วเปลี่ยนมันเป็น dynamic text ใส่ตรง var ว่า txt (หรือชื่ออะไรก็ได้)



ที่เฟรมแรก เดิมเราเขียนสคริปไว้ เราเพิ่มต่อท้ายไปว่า

อ้างอิง_root.onMouseDown = function() {

   mc_mc._x = _xmouse;
   mc_mc._y = _ymouse;
   txt = "x = "+mc_mc._x+" & y = "+mc_mc._y; // จำวิธีที่ให้ลอง trace() ได้ไหม นั่นล่ะเหมือนกัน
};

มันก็จะแสดงพิกัดให้เราทราบแล้ว เมื่อเรากดเมา้ส์ หรือเมื่อ event mouseDown มีการกระทำ  :22:


มาต่อเรื่องหนักกระโหลกกัน  :37:
จากตัวอย่าสคริปนั้น เราจะเห็นวิธีเขียนสคริปที่ดูแล้ว งงดีจัง
ว่าไปแล้ว ........ อธิบายยากจัง  :31:

อ้างอิง
_root.onMouseDown = function() {   // เมื่อมีการกดเม้าส์ที่รูท หรือหน้าเมนหลักชั้นนอกสุด..น่ะ :08:
                           
//จะให้ทำอะไรก็แล้วแต่
//จะให้ทำอะไรก็แล้วแต่

};// สิ้นสุดการทำงาน

คือจะเป็นฟังชั่นหนึ่งๆที่เรากำหนดขึ้น
เมื่อกดเม้าส์แล้ว ก็จะรันคำสั่งต่างๆในปีกา ตั้งแต่บรรทัดแรก จนสิ้นสุดการทำงาน ก็จบฟังชั่น
นั่นคือการกดหนึ่งครั้ง
เมื่อกดซ้ำ ก็จะรันทั้งหมดอีกครั้ง

ถ้าเราใส่ไว้ที่เฟรมแรก
เมื่อเราสั่งเล่นมูวี่ที่รูท ไปสัก 25 เฟรมแล้วหยุด แม้เฟรมที่ 25 ไม่มีสคริปนี้ก็ตาม
แต่เมื่อกดเม้าส์ ฟังชั่นนี้ก็ยังทำงานอยู่ เพราะเราได้ประกาศไว้ตั้งแต่แรกแล้วไงครับ  :22:

ไม่งงนะ  :44:

แต่ อ้าววว ยังงี้ก็ไม่ถูกหลักการน่ะสิ เพราะไอ้ mc ที่เราต้องการสั่งงานมันอยู่เฟรมแรก
พอเราเล่นเลยมา มันไม่มี mc ตัวนั้นอยู่ ฟังชั่นนี้ก็ไม่จำเป็นที่จะใช้น่ะสิ

:07: เออ ใช่เลย สคริปก็รันฟรีๆน่ะสิ กิน cpu เปล่าๆซะงั้น  :07:

เอาน่า   :21:   มีผูก ก็ต้องมีแก้ ใจเย็นพี่น้องครับ

เราสามารถ ลบ ฟังชั่นแบบที่เขียนเนี่ย ได้โดย

อ้างอิง
delete _root.onMouseDown //  :27: แค่นี้แหล่ะ ง่ายๆเลย งงล่ะสิ

เราก็ใส่ใว้ที่เฟรม 25 ซะ เมื่อมาถึงเฟรม ก็ลบฟังชั่นนี้ซะเลย เป็นการ Optimise อย่างดีเลยนะ  :52:

ทดสอบยังไงดีล่ะ
เอาแบบนี้

จากงานที่แล้ว
เราสร้างปุ่มขึ้นสักอัน

แล้วใส่ที่ปุ่มว่า

on(press){
delete _root.onMouseDown
}


ลองดูครับ

http://img2.f0nt.com/flash/6c355014dc8530be56f679969a317b9b.swf

:22: :22:

พักยก

เดี๋ยวจะเอาไฟลนี้ ทำเกมส์ง่ายๆมาให้เล่น


iannnnn

:46: อันนี้ไม่รู้เลยครับ ขอบคุณมากๆ หลายๆ+


ถามครับ

คำสั่ง delete น่ใช้ได้ครอบจักรวาลเลยเปล่าครับ
เช่น delete พวก on enterFrame ต่างๆ ไรงี้

ej_sing

อ้างคำพูดจาก: น้องไอ้แอน เมื่อ 14 ธ.ค. 2007, 01:42 น.
:46: อันนี้ไม่รู้เลยครับ ขอบคุณมากๆ หลายๆ+


ถามครับ

คำสั่ง delete น่ใช้ได้ครอบจักรวาลเลยเปล่าครับ
เช่น delete พวก on enterFrame ต่างๆ ไรงี้

ใช่เลยครับผม  :12:

ej_sing

เกมส์พิกัดนรก  :27:

อิอิ มั่วแหลก

วิธีเล่น  :21: คงไม่ต้องอธิบายนิ  :07: ลุยโลด !!!!

http://img2.f0nt.com/flash/eed2aaa28d12a37cb0400fdb331854d2.swf

ใครทำได้คลิกเดียว เซฟมาดูหน่อย  :22:

คิดสคริปสดๆ แบบไม่วางแผน ขนาดนี้ยังตั้งหนึ่งชั่วโมงแน่ะ  :39:

อ้างอิง_root.onMouseDown = function() {
   _root.chk(_root.rndx,_root.count);
   txt = "x = "+mc_mc._x;
};
count = 4;
rndx = random(400)+50;
targt_txt = "X = "+rndx;
txtn = "คุณคลิกได้อีก  "+_root.count+"  ครั้งเท่านั้น";
function chk(rndx) {
   _root.count -= 1;
   if (_root.count == 0) {
      _root.gotoAndStop(3); // แพ้
   }
   mc_mc._x = _xmouse;
   mc_mc._y = _ymouse;

   if (_xmouse == rndx) {
      _root.gotoAndStop(4);//ชนะ
   }
   txtn = "คุณคลิกได้อีก  "+_root.count+" ครั้งเท่านั้น";
}
จริงๆมีสามเฟรมน่ะ เอาง่ายๆ
เอาไฟล fla มาให้ชำแหล่ะด้วย เต็มที่เลย  :40:
ใครอยากเพิ่มแรนดอมเป็นมีพิกัด Y ด้วยก็ได้ สลับกัน

iannnnn

:07: โห แค่นี้ก็เอามาทำเป็นเกมได้ด้วย
แถมสนุกด้วยนะ นัีบถือครับน้า

(กดบวกเรื่อยๆ เลยเนี่ย)

ยุนเอ

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

นายโอ้เอ้

Today you , Tomorrow me.

นักศิลปะ

ทำได้ ว้าว

:25:



+ น้าแอ๊ด
โรงเรียนสอนศิลปะทอศิลป์

SMF 2.1.7 © 2026, Simple Machines