หน้า: 1 ... 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 ... 31
 
ผู้เขียน หัวข้อ: อนุบาลงาน ActionSctipt  (อ่าน 311061 ครั้ง)
0 สมาชิก และ 1 ขาจร กำลังดูหัวข้อนี้
 ง่ะ ยังไม่เคยทำเหมือนกันครับ ยังนึกไม่ออกเหมือนกัน
ถ้าเป็นพวกปุ่มหลักเช่น Ctrl+.. หรือ Shift+... อะไรเทือกๆนั้นก็พอไหว (ไม่เคยเหมือนกัน)  ฮือๆ~

และเวลาเทสปุ่มบนคีย์บอรด อย่าเทสในโปรแกรมนะครับ (Ctrl+Enter)
หากปุ่มนั้นๆ เป็นปุ่ม Shortcut ของแฟลชเอง มันจะไม่ทำงานตามสคริปครับ
ให้ออกมาเทสกับ swf ไฟลตรงๆ
บันทึกการเข้า

จริงๆลองเทสในโปรแกรมก็ได้นะครับ
แต่ต้องติ๊กถูกตรง Disable Keyboard Shortcuts ก่อน
บันทึกการเข้า
 โวย ใช่ๆ ลืมไปได้ยังไงฟะ ขอบคุณแมคมากครับ
บันทึกการเข้า

จากบททดสอบ อนุบาลขำๆ ฮือๆ~
เอามาเฉลยแบบของผม


<a href="http://img2.f0nt.com/flash/258d06ee9192ab34c3db07e17875a984.swf" target="_blank">http://img2.f0nt.com/flash/258d06ee9192ab34c3db07e17875a984.swf</a>

สคริปจ๊ะ  แป๊ะยิ้ม

แอบอ้าง

bt.onPress = function() {                // ปุ่มแรนด้อมหมุนตัวสามเหลี่ยม 3 ตัว(ใดๆ)
   i = random(3)+1;
   n = random(3)+4;
   m = random(3)+7;
   ret_mc.cir_mc["tri_mc"+i].onEnterFrame = function() {
      this._rotation += 25;
   };
   ret_mc.cir_mc["tri_mc"+n].onEnterFrame = function() {
      this._rotation -= 25;
   };
   ret_mc.cir_mc["tri_mc"+m].onEnterFrame = function() {
      this._rotation += 25;
   };
};

// พอปล่อยให้หยุด

bt.onRelease = bt.onReleaseOutside = function() {
   delete ret_mc.cir_mc["tri_mc"+i].onEnterFrame;
   delete ret_mc.cir_mc["tri_mc"+n].onEnterFrame;
   delete ret_mc.cir_mc["tri_mc"+m].onEnterFrame;
};

bt2.onRelease = function() {              // ปุ่มหมุนวงกลม 
   ii = random(2);                                     
   ret_mc.cir_mc.onEnterFrame = function() {    // แรนด้อมทิศทาง
      if (ii == 1) {
         ret_mc.cir_mc._rotation += 3;
      } else {
         ret_mc.cir_mc._rotation -= 3;
      }
   };
};

bt2_stop.onRelease = function() {                         //ปุ่มหยุด
   delete ret_mc.cir_mc.onEnterFrame;
};

// หยิบ mc

ret_mc.onPress = function() {
   this.startDrag();
};
ret_mc.onRelease = function() {
   this.stopDrag();
};

งานนี้ตัวเอกคือ วิธีอ้าง path mc และ วิธีเชียนชื่อเพื่ออ้างถึงได้สะดวกครับ

ret_mc.cir_mc["tri_mc"+i]    สมมุติ i = 1 จะได้ชื่อจริงๆก็คือ
ret_mc.cir_mc.tri_mc1

 ยิ้มน่ารัก

ลบ onEnterFrame ตลอดหากไม่ใช้งาน


===============================================================


ส่วนอันนี้ของผู้ร่วมสนุก ไฮโซมั่กๆ

แอบอ้าง
var speedCircle
var speedtriangle;

//ตัวขับเคลื่อน
ret_mc.onEnterFrame = function() {
   ret_mc.cir_mc._rotation += speedCircle;
}
ret_mc.cir_mc.onEnterFrame = function() {
   for(i=0; i<speedtriangle.length; i++) {
      eval("ret_mc.cir_mc.tri_mc"+(i+1))._rotation += speedtriangle;
   }
}

// option เสริม
function rotateTriangle(amount) {
   speedtriangle = [0, 0, 0, 0, 0, 0, 0, 0, 0];
   for(i=0; i<amount; i++) {
      speedtriangle[random(speedtriangle.length)] = random(30)+1;
   }
   trace(speedtriangle);
};
function rotateCircle(speedRotate) {
   ret_mc.speedCircle = this.speedRotate;
};

bt.onPress = function() {
   rotateTriangle(random(9)+1);
};
bt.onRelease = bt.onReleaseOutside = function() {
   speedtriangle = [0, 0, 0, 0, 0, 0, 0, 0, 0];
};
bt2.onRelease = function() {
   if(speedCircle < 0) {
      speedCircle = 2;
   }
   else {
      speedCircle = -2;
   }
};
bt2_stop.onRelease = function() {
   speedCircle = 0;
};

เดี๋ยวมาต่อ ครับ ง่วงแล้ว  แป๊ะยิ้ม
บันทึกการเข้า

ขอเบิ้ลครับ    มาตาลาย + ปวดกระโหลกกัน

ประเด็นของงานข้างบนนั้นคือ
การอ้างชื่อ path ครับ ในกรณีที่เป็นการเรียกแบบลูป
หรือ ชื่อ mc มีการเรียงกันโดยตัวแปร(เพื่ออะไรสักอย่าง แรนด้อมเรียกชื่อใดๆ ลูปเรียง ฯลฯ )

ของผมเรียกโดยวิธีนี้
ret_mc.cir_mc["tri_mc"+m]

ของ...^-FakE-^ ( ขออภัย  ไหว้ จำชื่อจริงๆไม่ได้ เปลี่ยนชื่อกันซะงง  ง่ะ ) ที่ส่งมาแบบไฮโซ
เรียกโดย ใช้ eval()
eval("ret_mc.cir_mc.tri_mc"+(i+1))


สังเกตุวิธีเขียนครับ สำคัญทีเดียวครับ
ที่เอามาอธิบายก็เพราะ.........ชอบลืมน่ะครับ  ง่ะ   เอามาลงไว้จะได้ไม่ลืม มาดูได้ตลอด

ตัวอย่างง่ายๆ
ถ้าสมมุติเราจะแรนด้อม mc ตัวใดตัวนึงในสามตัวให้ทำอะไรสักอย่าง
เช่น คลิกแล้วแรนด้อมเรียก mc ตัวใดตัวนึงให้หมุน

เราก็ตั้งชื่อ mc สามตัวให้มีการเรียงกันโดยตัวเลข(ง่ายที่สุด)
mc1 - mc2 - mc3

var i :Number;
_root.onMouseDown = function(){
i = random(3)+1;                     
  _root["mc"+i].onEnterFrame = function(){
       this._rotation += 15;
   }
}

ดูวิธีเขียนนะครับ
_root["mc"+i] ก็คือ ถ้า i ที่แรนด้อมมาเท่ากับ 2 ก็จะได้ชื่อ mc ออกมา _root.mc2
ไม่งงนะ
สังเกตุ ไม่มี "."  ต่อท้าย _root แต่ใช้ [] เอามาติดกันเลย  อี๋~ วุ๊ยยยอธิบายไม่เป็น ดูเอาคงเข้าใจนะครับ

ทีนี้ถ้ากรณี path ลึกเข้าไป อย่างในตัวทดสอบขำๆนั่น ก็ซ้อนๆกันจนถึงชื่อที่ต้องการ
แบบนี้ไงครับ ret_mc.cir_mc["tri_mc"+m] ไม่อธิบายนะ คงเข้าใจเนาะ

เอาล่ะ ทีนี้ ประเด็นหลัก (ทำไมมันหลายหลักจังวะ) .......อันนี้หลักกว่าๆครับ  ชิ

ไม่เอา _root หรือ this นำหน้า _root["mc"+i] ได้ไหม เขียนโต้งๆเลย ["mc"+i] ?

เพราะเคยคุยไว้ว่า หากมีการโหลดมูวี่เข้ามาจากภายนอก (จริงๆอธิบายคร่าวๆไปครั้งนึงแล้วครับ)
ก็จะสับสนเรื่อง _root อีกน่ะสิ ต้อง _lockroot = false โอ๊ยวุ่นวาย

หากเขียนจาก _root["mc"+i]._x += 20
เป็น ["mc"+i]._x += 20

ได้ไหม ...........          ไม่ได้ครับ เพราะ ......อะไรวะ นั่นน่ะสิ ก็ syntax error อ่ะ
เพราะหากมีการทำอะไรๆกับฝั่งซ้ายของสคริป มันไม่ได้ นั่นเป็นเกือบทุกภาษามั๊ง (เดา)
 
แต่แก้ได้โดยใช้

แอบอ้าง
eval function

eval(expression:Object) : Object
eval(expression:String) : Object

Accesses variables, properties, objects, or movie clips by name. If expression is a variable or a property, the value of the variable or property is returned. If expression is an object or movie clip, a reference to the object or movie clip is returned.
If the element named in expression cannot be found, undefined is returned.

eval() คือ มันจะคืนค่า ตัวแปร หรืออะไรๆ ออกมาเป็นชื่อ (ผมอธิบายถูกมั๊ย ....ไม่รู้แล้วเสือกมาทำเก่งอีก  ชิ )
//แก้ให้ถูกต้อง eval น่าจะเป็นการคืนค่า Object นั้นๆ ตามชื่อที่ใส่เข้าไปนะครับ (ถ้ามีอยู่จริง)
ขอบคุณ ^-FakE-^  ครับที่อธิบายเพิ่มเติม

จากอันนั้นเราก็เอามาใส่ eval()ซะ

var i :Number;
_root.onMouseDown = function(){
i = random(3)+1;                     
  eval(["mc"+i]).onEnterFrame = function(){
       this._rotation += 15;
   }
}

หรือ

eval(["mc"+i])._x += 20

เท่านี้ก็ไม่ต้องใส่ _root หรือ this นำหน้าให้วุ่นวายแล้ว (ดูแล้ววุ่นวายกว่าเดิมไหมน่ะ)

จริงๆ eval() มันน่าจะมีมากกว่านี้นะ แต่ผมใช้แค่นี้เอง

ครับ น่าจะพอเข้าใจเนาะ
เรื่องหยุมหยิมที่ไม่มีใครมาอธิบายหรอกครับแบบนี้
นอกจากไอ้ขี้ลืมอย่างผม มาอธิบายให้ตัวเองไว้กลับมาอ่านน่ะครับ  ฮิ้ววว
« แก้ไขครั้งสุดท้าย: 18 มิ.ย. 2008, 00:44 น. โดย ej_sing » บันทึกการเข้า


จริงๆ แล้วที่ใช้ eval เพราะแค่ต้องการให้วนลูปตัวแปร Object นี่ละครับ

ถามพี่ที่ทำงานเขาบอกมายังงี้ก็เลยใช้  ง่ะ


eval น่าจะเป็นการคืนค่า Object นั้นๆ ตามชื่อที่ใส่เข้าไปนะครับ (ถ้ามีอยู่จริง)

สงสัยนิดนึงครับต้องใส่ [] ด้วยเหรอครับ  งง

« แก้ไขครั้งสุดท้าย: 18 มิ.ย. 2008, 00:42 น. โดย ^-FakE-^ » บันทึกการเข้า

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย
ตอนนี้ผมไม่ได้ตามเลยครับ น้า  ฮือๆ~ ขออภัยจริงๆ สงสัยเป็นเพราะ งุ่นง่านแต่กับงานเอกสารมั้ง
ถ้าโดนถีบหัวให้มาทำพวกนี้อีกคงกลับมางัวเงียอีกเป็นแน่แท้  กรี๊ดดดดด
บันทึกการเข้า

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

โอ้ ขอบคุณครับ ผมไม่เข้าใจคำสั่งจริงๆของมันสักเท่าไร แต่เสือกใช้เป็น  ง่ะ
ขอบคุณครับ อธิบายสั้นๆ แต่เข้าใจขึ้นเยอะเลยครับ  (ผมเขียนแต่น้ำแฮะ)







//จักรีนี่ใครเหรอ ........... ลืมไปแล้ว  ฮิ้ววว
« แก้ไขครั้งสุดท้าย: 18 มิ.ย. 2008, 00:48 น. โดย ej_sing » บันทึกการเข้า



เอก็ไม่ค่อยเป็นหรอกครับ  ง่ะ

ลอกๆ เขามา จากหน้าแรกๆ ด้วยซ้ำ นึกคำสั่งไม่ออก
บันทึกการเข้า

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

สงสัยนิดนึงครับต้องใส่ [] ด้วยเหรอครับ  งง



ถ้าเรียกเดี่ยวๆ ไม่ต้องก็ได้ครับเป็น   
eval("mc"+i).onEnterFrame = function(){
       this._rotation += 15;
   }

ลืมเอาออก  หน้าแตก
แต่ถ้ามีการเรียก path ลึกๆ ซ้อนๆกันก็ต้องมีครับ
eval(mc_fee["mc"+i]).onEnterFrame = function(){
       this._rotation += 15;
   }

แต่ถ้า มีชื่อนำหน้าแบบอันบน eval(mc_fee["mc"+i])
ก็ไม่ต้องใช้ eval() แล้วก็ได้ โล่งๆ

mc_fee["mc"+i].onEnterFrame = function(){
       this._rotation += 15;
   }
« แก้ไขครั้งสุดท้าย: 18 มิ.ย. 2008, 11:04 น. โดย ej_sing » บันทึกการเข้า





   eval("mc_fee.mc"+i) ไม่ได้เหรอครับ
บันทึกการเข้า

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย
ได้นะครับ

เรียกถึงระดับ property ใช้ eval เลยก็ได้(มั้ง ? เหมือนเคยทำ น้องดำ)
บันทึกการเข้า

ก่อสร้างกับทำลาย เหมือนที่ลงมือ ต่างที่การกระทำ
      โอ้วไม่ได้เข้ามานาน จู๋นี้ไปกันไกลลิบลิ่วแล้ว
      แวะมาทักทายน๊าแอ๊ดครับ ^^ ฮี่ๆ
บันทึกการเข้า

์NY Together
 (แจ๋ว แจ๋ว) ขอบคุณมาก ๆ ครับ

ได้้รับความรู้มากมาย

แต่ทำไมมัน เงียบ ๆ ไป แล้วล่ะครับ  ง่ะ
« แก้ไขครั้งสุดท้าย: 18 ก.ค. 2008, 15:53 น. โดย โอ้ โห เฮะ !!! » บันทึกการเข้า

....(= - =")..   .3dsMax  .  ..(๐ Q")<<<<<..
คงจบคอร์สอนุบาลแล้วล่ะครับ
เพราะเห็นมีหลักสูตรมัธยมโผล่มาแจมเยอะแยะเลย ตูยังอยู่แค่ปอเตรียม ฮือๆ~
บันทึกการเข้า

ทำมาหากินด้วยการเปิดร้านสกรีนเสื้อยืด จ้ะ
หน้า: 1 ... 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 ... 31
 
 
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines | Thai language by ThaiSMF Valid XHTML 1.0! Valid CSS!