ถ้าไม่ใช่เฟรมนี้ กระทำ...

เริ่มโพสต์โดย Layiji, 08 ม.ค. 2007, 09:56 น.

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

Layiji

ผมอยากตั้ง if ที่เช็คว่าถ้าใน MC ไม่ใช่เฟรมที่  3 แล้วให้กระทำการต่างๆ จะใช้คำสั่งอะไรครับ

และอีกอันคือ ถ้า MC play ยังไม่ถึงเฟรมสุดท้ายให้กระทำการ......

ควรใช้คำสั่งอะไรดีครับ

ขอบคุณครับ
นักเขียนการ์ตูนรายปี

heart

if ( MC._currentframe != 3 ){


}



//**********************

if( MC._currentframe <  MC._totalframes ){


}



//******************
_currentframe เฟรมปัจจุบัน

_totalframes จำนวนเฟรมทั้งหมด


Layiji

นักเขียนการ์ตูนรายปี

Layiji

ถามต่อสักนิดครับ พอดีผมเขียนโค้ดสั่ง RollOver RollOut ง่ายๆมาชุดนึงก็ใช้งานไดดี แต่พอจะลองลดรูปให้เป็น fuction มันไม่ได้ผลครับ ไม่รู้พลาดตรงไหน


http://img2.f0nt.com/flash/1d817d087f66b89ceaa035b8aec98b1a.swf

function McIn(mmc) {
mmc.onEnterFrame = function() {
mmc.nextFrame();
};
}

b1.onRollOver = function() {
service.onEnterFrame = function() {
service.nextFrame();
};
};
b1.onRollOut = function() {
service.onEnterFrame = function() {
service.prevFrame();
};
};
b2.onRollOver = McIn(service2);
นักเขียนการ์ตูนรายปี

iannnnn


heart

#5
ไม่สามารถทำแบบนั้นได้ครับ  อยากทราบเหตุผล ถามอีกรอบครับ เผื่อไม่อยากอ่านยาว   :40:

function McIn() {
     this.mmc.onEnterFrame = function() {
        this.nextFrame();
    };
}


b2.mmc = service2;
b2.onRollOver = McIn;


แบบนี้ทำได้ครับ ลองอ่านโค้ดดู



function McIn() {
     this.mmc.onEnterFrame = function() {   //<----- this ตรงนี้หมายถึงที่ปุ่มมีตัวแปร mmc อยู่
        this.nextFrame();   //<----- this ตรงนี้หมายถึงตัว mmc เพราะ function oี้ทำงานที่ตัว mmc
    };
}

Layiji

#6
ได้แล้วครับ  เข้าได้แต่ออกไม่ได้  :05: มันคงไม่ใช่แค่เพิ่มชุดคำสั่งเลียนแบบแหงๆเลย  :44:
http://img2.f0nt.com/flash/178ea7b0a658cac0c9ee76fefc774464.swf
function McIn() {
this.mmc.onEnterFrame = function() {
this.nextFrame();
};
}
function McOut() {
this.mmc.onEnterFrame = function() {
this.prevFrame();
};
}
b2.mmc = service2;
b2.onRollOver = McIn;
b2.onRollOut = McOut;




อยากรู้เหตุผลครับ ขอบคุณมากครับ  :22:

นิดนึงครับ การสั่งแบบนี้แปลว่าถ้าเอาเมาส์มาแตะ มันจะเป็น nextFrame() ไปเรื่อยๆ แม้ว่ามันจะถึงเฟรมสุดท้ายแล้วก็ตามใช่มั้ยครับ? อย่างนี้มันจะมีปํญหากับ memory หรือเปล่า หรือว่าผมคิดมากเกินไป
นักเขียนการ์ตูนรายปี

heart

ถูกต้อง มันมีปัญหากับการทำงานโดยไม่จำเป็นแน่นอน

(ลองใส่ trace ลงไปดู ถึงว่า่จะทำงานไปสุดแล้ว แต่มันก็ยัง trace ออกมา)


function McIn() {
this.mmc.onEnterFrame = function() {
this.nextFrame();
if(this._currentframe == this._totalframes){
delete this.onEnterFrame;
}
};
}
function McOut() {
this.mmc.onEnterFrame = function() {
this.prevFrame();
if(this._currentframe == 1){
delete this.onEnterFrame;
}
};
}
b2.mmc = service2;
b2.onRollOver = McIn;
b2.onRollOut = McOut;


ลองนี่ดูครับ 

ตอนเล่นเฟรมกลับสคริปที่เขียนมามันทำงานได้ครับ ไม่แน่ใจว่าทำไม ที่มห้ดูมันถึงไม่กลับ

Layiji

โอ้ได้แล้วครับ คุณฮาร์ตนี่แม่นจริงๆ

ขอบคุณที่เสียเวลาครับ จะไปหาอ่านเรื่อง this ใหม่ครับ เรียงลำดับไม่ค่อยถูก
นักเขียนการ์ตูนรายปี

iannnnn

โอ้ว สาระเยี่ยมมาก มีประโยชน์ๆ :45:

(+2) ทั้งคู่ครับ

heart

สาเหตุว่า ทำไม

b2.onRollOver = McIn(service2);


ไม่ได้


ก็เพราะว่ามันจะมองเป็น

b2.onRollOver = การใช้งานฟังชั่น McIn โดยส่งค่าไปเป็น service2

แต่ถ้า

b2.onRollOver = McIn

มันจะมองว่า  onRollOver  ชี้ไปที่ McIn
ซึ่ง McIn มีความหมายเป็นฟังชั่น

Layiji

จากตรงนี้ผมลองเป็น

b1.onPress = getURL("http://www.hotmail.com");

มันจะไม่ได้

แต่ถ้าไปที่ ปุ่ม แล้วเป็น

on (Press) {
getURL("http://www.hotmail.com");
}

มันถึงจะได้
ถ้าอย่างนั้นวิธีการ grtURL ใน timeline หลัก เราต้องทำเป็น function ให้เรียกใช้เหรอครับ
นักเขียนการ์ตูนรายปี

heart

#12

function toURL(){
   getURL(this.url);
}

b1.url = "http://www.hotmail.com";
b1.onRelease = toURL;







Layiji

#13
อ้างคำพูดจาก: heart เมื่อ 08 ม.ค. 2007, 17:20 น.
function toURL(){
   getURL(this.url);
}

b1.url = "http://www.hotmail.com";
b1.onRelease = toURL;

ขอบคุณมากครับ
ที่ผมกำลังงมๆแล้วก็เลิกทำไปเป็นอย่างนี้ครับ

function toURL(){
   getURL(url); 
}

b1.url = "http://www.hotmail.com";
b1.onRelease = toURL;



อ้างอิง

สับสนกับการใช้ this จริงๆครับ   :41:
นักเขียนการ์ตูนรายปี

heart

this คือ ที่นี่


function a(){

  trace(this);

}

ถ้า
a();
คำว่า this จะหมายถึง จุดที่เราเขียนฟังชั่นลงไป อาจจะหมายถึง _root ถ้าเราเขียนบน _root


ถ้า


btn.onRelease = a;

แล้ว

this จะหมายถึง btn เำพราะว่ามันเหมือนว่าฟังชั่นนี้ทำงานบน btn

อ้างอิงfunction toURL(){
   getURL(url);
}

b1.url = "http://www.hotmail.com";
b1.onRelease = toURL;

จากโค้ดนี้ getURL(url);  จะต้องเปลี่ยนเป็น getURL(this.url);
เพราะว่าถ้า url เฉยๆจะหายถึง url ที่อยู่ ณ.จุดที่เขียนฟังชั่นลงไป  แต่ถ้า this.url จะหมายถึง  ฟังชั่นนี้ไปรันอยู่บน  b1  มันจะหมายถึงตัวแปร url ของ b1

SMF 2.1.7 © 2026, Simple Machines