หน้า: [1]
 
ผู้เขียน หัวข้อ: ASสั่งให้MCหยุดตอนเล่นจบทำไงครับ  (อ่าน 5145 ครั้ง)
0 สมาชิก และ 1 ขาจร กำลังดูหัวข้อนี้

โค้ด:
m = mo._currentframe;

playbu.onRollOver = function() {
    if (m>=180) {
        mo.play();
    } else if (m>=140) {
        mo.gotoAndPlay(181);
    } else if (m>=120) {
        mo.gotoAndPlay((200-m)+120);
    } else if (m<120) {
        mo.gotoAndStop(1);
    }
}

MC mo มี 200 frame อยากให้พอเอาเมาส์ไปชี้แล้ว พอ MC จบ ให้หยุดทำไงครับ
ถ้าไม่เอาเมาส์ไป RollOver ก็ให้ MC มันวิ่งต่อไปเรื่อยๆ
ปล. ให้มันหยุดตอน frame 200 หรือ 1 ก็ได้ครับ


บันทึกการเข้า

No more tear !!!
check state ตอนที่เล่นจบในแต่ละรอบครับ

ถ้า state = RollOver ก็ไม่ต้องวนแล้วหลุดจากลูปไปเลย

ปล. ไม่รู้ว่าโปรแกรมอะไร แต่หลักการทำงานประมาณนี้ละครับ  (อิอิ)
บันทึกการเข้า

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย
check state ตอนที่เล่นจบในแต่ละรอบครับ

ถ้า state = RollOver ก็ไม่ต้องวนแล้วหลุดจากลูปไปเลย

ปล. ไม่รู้ว่าโปรแกรมอะไร แต่หลักการทำงานประมาณนี้ละครับ  (อิอิ)
:08:อยู่ใน แตกแฟลช ก็ต้องโปรแกรมแฟลชสิครับ

ใครเป็นช่วยอธิบายอย่างละเอียดให้หน่อยครับ ยกตัวอย่างมาด้วยจะเป็นพระคุณอย่างสูง
บันทึกการเข้า

No more tear !!!
อธิบายแบบหลักการแหละดีแล้วครับ คริคริ
บันทึกการเข้า

ทำมาหากินด้วยการเปิดร้านสกรีนเสื้อยืด จ้ะ
แง.....
งานจะส่งอยู่แล้ว
มี 13 Scene เพิ่งเส็จไปแค่ซีนเดียว จะบ้าตายอยู่แล้ว
*&฿%$@!!!)9;^+_@~
บันทึกการเข้า

No more tear !!!
คือลองเปลี่ยน As เป็น
โค้ด:
m = mo._currentframe;
tt = 0;
playbu.onRollOver = function() {
    tt = 1;
    if (m>=180) {
        mo.play();
    } else if (m>=140) {
        mo.gotoAndPlay(181);
    }else if (m>=120) {
        mo.gotoAndPlay((200-m)+120);
    } else if (m<120) {
        mo.gotoAndStop(1);
    }
}

playbu.onRollOut = function() {
    tt = 0;
    if (m>=180) {
        mo.play();
    } else if (m<120) {
        mo.gotoAndPlay(3);
    }
}
แล้วใส่ AS ใน MC  frame 1 เป็น
โค้ด:
if (tt==1) {
    this.stop();
} else {
    this.gotoAndPlay(3);
}
แต่มันยังไม่ได้น่ะครับ
บันทึกการเข้า

No more tear !!!
m = mo._currentframe;
playbu.onRollOver = function() {
    if(!mouseOver)
   {
       if (m>=180) {
           mo.play();
       } else if (m>=140) {
           mo.gotoAndPlay(181);
       }else if (m>=120) {
           mo.gotoAndPlay((200-m)+120);
       } else if (m<120) {
           mo.gotoAndStop(1);
    }else{
         ไม่ต้องทำอะไรครับพี่น้อง  ฮิ้ววว
          หรือไม่ก็ใส่คำสั่ง end อะไรซักอย่าง
    }
}

mouseOver ก็เปลี่ยนเป็นคำสั่ง ตรวจสอบว่ามีเมาส์มา rollOver ที่เฟรมนั้นหรือเปล่า

ปล.  เอือม แฟลช เฟิช ไม่เคยเขียน แต่ "หลักการ" มันประมาณนี้
บันทึกการเข้า

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย
เข้าใจว่ามันน่าจะเป็นว่า ถ้า mouse ไป rollover ครั้งเดียว ไม่ว่าเวลาไหน... ก็ปล่อยให้มันเล่นจบไปก่อนแล้วจึงหยุด ถูกมั๊ยครับ

ดังนั้นสังเกตว่าเหตุการณ์ 'หยุด' จริงๆ แล้วไม่ได้ถูกผูกขึ้นกับจังหวะ rollover โดยตรง... แต่ rollover จะเป็นแค่ตัวให้สัญญาณสถานะ ว่า MC ตัวนี้ถูกหมายตาให้หยุดไว้ก่อนแล้ว...

คล้ายๆ กับขับรถเลี้ยวผิด แล้วตำรวจมันแอบดักอยู่ตรงหัวมุมนั้นพอดี.. มันก็ให้ตั๋วคุณเอาไปจ่ายที่สถานีตำรวจ... คือ รถคุณไม่ได้ถูกยึดขณะนั้น แต่ต้องเอาตั๋วไปจ่ายค่าปรับทีหลัง หลังคุณเสร็จธุระอะไรแล้วก็ว่าไป

ความจริงก็ใช้วิธีแก้ปัญหาแบบนี้ได้หลายแบบนะครับ... จะลองยกตัวอย่างแบบนึง ที่คิดว่าน่าจะเข้าใจง่าย.. คือการใช้ตัวแปรแบบ flag ... ซึ่งก็คล้ายๆ กับความเข้าใจพื้นฐานว่าเป็นตัวชี้สถานะ ... หรือตั๋วที่ต้องเอาไปเสียค่าปรับ

ตัวแปรแบบ flag นั้น เราก็แค่ตั้งตัวแปรใหม่สักตัวที่เข้าใจง่าย อาจจะเป็น stopStatus เป็นต้น ซึ่งอาจจะเริ่มต้นให้มันเป็น false หรือ 0 ... แต่หลังจากที่ MC ถูก rollover ก็มีโค้ดแค่บรรทัดเดียวคือ กลับสถานะตัวแปรนี้ให้เป็น true หรือ 1 ... โดยจะเขียนเป็น stopStatus = 1; ตรงๆ ก็ได้ หรือถ้าอยากให้มันเปิด ปิดๆ แบบเป็น switch ไฟได้... ก็มักจะเขียนกันในรูป stopStatus = !stopStatus; เป็นต้น

ส่วนการให้มันหยุดนั้น อาจจะไปใส่ code ที่เฟรมสุดท้ายของ MC นั้น แล้วแค่เช็คว่า ตัวแปร stopStatus เป็นค่าอะไร ถ้าใช่ 1 ก็บอกให้มัน stop ไป

หรือถ้าอยากเก็บโค้ดไว้ที่ timeline หลักให้หมด ... ก็สามารถใช้ onEnterFrame เข้ามาคอยเช็คตลอดเวลา ว่าเมื่อไหร่ที่ MC นั้น เล่นถึงเฟรมนั้น ให้เช็คค่าตัวแปร stopStatus ว่าเป็นอะไร ถ้าใช่ 1 ก็ให้หยุด

เป็นต้น
บันทึกการเข้า
ขอบคุณครับ (+2)
บันทึกการเข้า

ทำมาหากินด้วยการเปิดร้านสกรีนเสื้อยืด จ้ะ

ผมก็ทำแล้วไงครับ

คือลองเปลี่ยน As เป็น
โค้ด:
m = mo._currentframe;
tt = 0;
playbu.onRollOver = function() {
    tt = 1;
    if (m>=180) {
        mo.play();
    } else if (m>=140) {
        mo.gotoAndPlay(181);
    }else if (m>=120) {
        mo.gotoAndPlay((200-m)+120);
    } else if (m<120) {
        mo.gotoAndStop(1);
    }
}

playbu.onRollOut = function() {
    tt = 0;
    if (m>=180) {
        mo.play();
    } else if (m<120) {
        mo.gotoAndPlay(2;
    }
}
แล้วใส่ AS ใน MC  frame 1 เป็น
โค้ด:
if (tt==1) {
    this.stop();
} else {
    this.gotoAndPlay(3);
}
แต่มันยังไม่ได้น่ะครับ



m = mo._currentframe;
tt = 0;
playbu.onRollOver = function() {
    tt = 1;
    if (m>=180) {
        mo.play();
    } else if (m>=140) {
        mo.gotoAndPlay(181);
    }else if (m>=120) {
        mo.gotoAndPlay((200-m)+120);
    } else if (m<120) {
        mo.gotoAndStop(1);
    }
}

playbu.onRollOut = function() {
    tt = 0;
    if (m>=180) {
        mo.play();
    } else if (m<120) {
        mo.gotoAndPlay(3);
    }
}

แล้วใส่ AS ใน MC  frame 1 เป็น
if (tt==1) {
    this.stop();
} else {
    this.gotoAndPlay(2);
}

แล้วทำไมมันยังไม่ได้ล่ะครับ
บันทึกการเข้า

No more tear !!!
ปัญหาแรกที่ผมเห็นคือ tt ที่ใส่ใน MC ครับ
ลอง trace ค่า tt ดู ว่าจริงๆ แล้วมันเท่ากับเท่าไหร่ ณ แต่ละตำแหน่ง
เพราะตอนนี้เขียน โค้ด ทั้งบน timeline หลัก และ ใน MC แต่ว่าไม่มีการอ้างอิง path ของตัวแปรเลย
น่าจะเป็นตัวแปรต่างกันนะครับ ผมเดาว่าถ้าไป trace ค่า tt ใน โค้ดส่วนที่สอง น่าจะได้ค่าเป็น undefined

อีกส่วน เดาว่า MC ตัวนั้นชื่อ mo

ลองดูตรง m นะครับ
m คือ currentframe ที่ได้จากบรรทัดแรก
ผมเดาว่าทั้งหมดนี่คือไม่ได้อยู่ ใน onEnterFrame ดังนั้น
m น่าจะเท่ากับ 1 ตลอดเวลา เพราะไม่ได้ถูก update เลย ถึงแม้ตอนหลัง mo จะเล่นไปที่เฟรมอื่นแล้ว

ทำให้เงื่อนไขอาจจะผิดพลาดกับที่ต้องการได้นะ...
บันทึกการเข้า
หน้า: [1]
 
 
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!