ฟอนต์ฟอรั่ม

F0NT Community (เก่า) => ห้องคอม => ห้องแฟลช => โพสต์ถูกเริ่มโดย: ~PopPio~ เมื่อ 21 ส.ค. 2006, 11:30 น.

ชื่อเรื่อง: ASสั่งให้MCหยุดตอนเล่นจบทำไงครับ
โพสต์โดย: ~PopPio~ เมื่อ 21 ส.ค. 2006, 11:30 น.

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 ก็ได้ครับ


ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงค
โพสต์โดย: ยุนเอ เมื่อ 21 ส.ค. 2006, 11:39 น.
check state ตอนที่เล่นจบในแต่ละรอบครับ

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

ปล. ไม่รู้ว่าโปรแกรมอะไร แต่หลักการทำงานประมาณนี้ละครับ  :43:
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงค
โพสต์โดย: ~PopPio~ เมื่อ 21 ส.ค. 2006, 11:42 น.
อ้างคำพูดจาก: ^-FakE-^ เมื่อ 21 ส.ค. 2006, 11:39 น.
check state ตอนที่เล่นจบในแต่ละรอบครับ

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

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

ใครเป็นช่วยอธิบายอย่างละเอียดให้หน่อยครับ ยกตัวอย่างมาด้วยจะเป็นพระคุณอย่างสูง
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงครับ
โพสต์โดย: iannnnn เมื่อ 21 ส.ค. 2006, 11:43 น.
อธิบายแบบหลักการแหละดีแล้วครับ :21:
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงค
โพสต์โดย: ~PopPio~ เมื่อ 21 ส.ค. 2006, 11:47 น.
แง.....
งานจะส่งอยู่แล้ว
มี 13 Scene เพิ่งเส็จไปแค่ซีนเดียว จะบ้าตายอยู่แล้ว
*&฿%$@!!!)9;^+_@~
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงค
โพสต์โดย: ~PopPio~ เมื่อ 21 ส.ค. 2006, 11:49 น.
คือลองเปลี่ยน 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);
}

แต่มันยังไม่ได้น่ะครับ
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงค
โพสต์โดย: ยุนเอ เมื่อ 21 ส.ค. 2006, 11:54 น.
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{
         ไม่ต้องทำอะไรครับพี่น้อง  :42:
          หรือไม่ก็ใส่คำสั่ง end อะไรซักอย่าง
    }
}

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

ปล.  :39: แฟลช เฟิช ไม่เคยเขียน แต่ "หลักการ" มันประมาณนี้
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงครับ
โพสต์โดย: X Saint เมื่อ 22 ส.ค. 2006, 00:57 น.
เข้าใจว่ามันน่าจะเป็นว่า ถ้า 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 ก็ให้หยุด

เป็นต้น
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงครับ
โพสต์โดย: iannnnn เมื่อ 22 ส.ค. 2006, 00:59 น.
ขอบคุณครับ (+2)
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงค
โพสต์โดย: ~PopPio~ เมื่อ 22 ส.ค. 2006, 17:03 น.

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

อ้างคำพูดจาก: ~PopPio~ เมื่อ 21 ส.ค. 2006, 11:49 น.
คือลองเปลี่ยน 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);
}

แล้วทำไมมันยังไม่ได้ล่ะครับ
ชื่อเรื่อง: Re: ASสั่งให้MCหยุดตอนเล่นจบทำไงครับ
โพสต์โดย: X Saint เมื่อ 23 ส.ค. 2006, 05:47 น.
ปัญหาแรกที่ผมเห็นคือ tt ที่ใส่ใน MC ครับ
ลอง trace ค่า tt ดู ว่าจริงๆ แล้วมันเท่ากับเท่าไหร่ ณ แต่ละตำแหน่ง
เพราะตอนนี้เขียน โค้ด ทั้งบน timeline หลัก และ ใน MC แต่ว่าไม่มีการอ้างอิง path ของตัวแปรเลย
น่าจะเป็นตัวแปรต่างกันนะครับ ผมเดาว่าถ้าไป trace ค่า tt ใน โค้ดส่วนที่สอง น่าจะได้ค่าเป็น undefined

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

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

ทำให้เงื่อนไขอาจจะผิดพลาดกับที่ต้องการได้นะ...