ความเดิมตอนที่แล้ว เรากดปุ่มนึง ตัว MC ของเราก็วิ่งไป
กึ๊ก นึง ใช่มั๊ยครับ
ทำยังไงให้กดทีเดียวแล้วมันก็วิ่งปรู๊ดยาวๆ แล้วค่อยหยุด ให้มันดูเหมือนกดแล้ว
ค่อยๆวิ่งไปเอง ไม่ใช่ต้องคอยกดถี่ๆอยู่
กลไกที่เราต้องการคือ
การทำซ้ำเรารู้จัก
.onRelease .onPress. onRollOver จากตอนก่อนๆ ที่ทำให้กับปุ่ม ซึ่งเราเรียกว่า eventHandler กันแล้ว... คราวนี้มารู้จักเพื่อนใหม่ .onEnterFrame ซึ่งจะช่วยให้เราทำซ้ำได้
หลักการทำงานของ onEnterFrame คือ ทำทุกๆครั้งของจังหวะเปลี่ยนเฟรม ... ตรงนี้อาจจะงงหน่อยนะคับ คือ ผมเรียกว่า
จังหวะเปลี่ยนเฟรม... เพราะในความเป็นจริง เรามีเฟรมเดียว หรือเฟรมไม่เปลี่ยน มันก็จะเกิดการทำซ้ำๆ... แต่ที่เรียกว่าจังหวะเปลี่ยนเฟรม ... เพราะว่าตัว event นี้จะไปสัมพันธ์กับค่า frame rate ที่เราตั้งไว้... ปกติ flash จะให้ค่า = 12 frame per sec แปลว่า enterFrame จะทำงาน 12 ครั้ง ภายใน 1 วินาที... นั่นแปลว่าถ้าเราไปลด หรือ เพิ่มค่า fps ก็จะส่งผลต่อความเร็วของการทำคำสั่งภายใน enterFrame ด้วยคับ
เดิมเวลาเราต้องการ onRelease เราต้องเอาไปติดกับปุ่ม เป็น
butt.onReleaseทีนี้เราต้องการใช้
onEnterFrame เราก็ต้องเอามันไปติดกับตัวอะไรสักอย่าง... โดยคุณสมบัติพื้นฐาน เราสามารถเอามันไปติดกับ MC ตัวใดๆ ก็ได้.. แต่ในที่นี้เราต้องการทำซ้ำเฉยๆ ไม่ได้ผูกพันกับ MC ใดๆ
ง่ายที่สุดคือเอามันไปผูกติดกับ Timeline หลัก.... ซึ่ง เราเรียกว่า this จากการเขียน script ไว้ยัง Timeline หลัก... จึงได้รูปแบบของการใช้งานคือ
อ้างอิงthis.onEnterFrame = function() {
คำสั่ง;
}
ดังนั้นถ้าเราทำแบบเดิม คือ บวกค่าให้ แกน x ของ MC ที่ชื่อว่า dot เราจะได้ script ดังนี้
อ้างอิงthis.onEnterFrame = function() {
dot._x+=5;
if(dot._x>300) {
dot._x=0;
}
}
ผลที่ได้
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9186
แต่ว่าตัวอย่างข้างต้นไม่เกี่ยวกับปุ่ม ถ้าเราอยากให้มันกดปุ่มแล้ว dot วิ่งไประยะนึงแล้วหยุด จะทำยังไง
นั่นก็คือ
เอาทั้ง onRelease กับ onEnterFrame มารวมกันซะ
คิดกันทีละขั้นนะคับ เริ่มจาก เราทำปุ่มก่อน ได้ โค้ด เป็น
อ้างอิงbutt.onRelease = function() {
}
ทุกครั้งที่กดปุ่มเราต้องการให้มันทำซ้ำ เราจึงใส่ onEnterFrame เข้าไปข้างในกลายเป็น
อ้างอิงbutt.onRelease = function() {
dot.onEnterFrame = function() {
dot._x +=5;
if(dot._x>300) {
dot._x=0;
}
}
}
สังเกตดีๆนะคับ ผมไม่ใช้ this.onEnterFrame เพราะ enterFrame ถูกเรียกใช้จาก butt ทำให้ this ไม่ใช่ timeline หลักอีกต่อไป... ดังนั้นผมเลยเอาไปฝากไว้ที่ mc ที่ชื่อ dot แทน
โค้ดทำงานได้แล้วคับ!!!! แต่!!! แบบนี้เราจะได้การวิ่งไปตลอด คือ กดทีนึงมันก็วิ่งไปตลอดชีวิต...
แต่ที่เราอยากได้คือ กดทีนึงก็วิ่งไประยะนึงแล้วหยุด รอการกดใหม่จึงจะวิ่งต่อ... จึงต้องมีการ
กำหนดเงื่อนไข ว่าจะให้มันทำซ้ำกี่ครั้งผมเลยกำหนดตัวแปรสำหรับนับ ชื่อ i ขึ้นมา
โดยกำหนดให้ทุกครั้งที่เรากดปุ่ม i จะเท่ากับ 0
แล้วกำหนดเงื่อนไขว่าต้องการให้มันทำซ้ำ 20 ครั้ง นั่นคือมันจะวิ่งด้วยความเร็ว 5 pixel แต่ว่าทำซ้ำ 20 ครั้ง... แปลว่า ทุกครั้งที่กด มันจะวิ่งไประยะทาง 20 * 5 = 100 pixel นั่นเอง
ทำให้เราได้โค้ดออกมาเป็น
อ้างอิงbutt.onRelease = function() {
i=0;
dot.onEnterFrame = function() {
if(i<20) {
dot._x +=5;
if(dot._x>300) {
dot._x=0;
}
i++;
}
}
}
ยังไม่จบครับ... เนื่องจากว่า onEnterFrame ยังคงทำงานต่อไป ถึงแม้ว่า dot จะไม่ขยับแล้วก็ตาม... นั่นเพราะ onEnterFrame ถูกเรียกมาแล้ว มันก็ยังคงทำงานต่อไปตลอดชีวิต...
เพื่อความเป็นระเบียบเรียบร้อย เมื่อเราหยุดแล้ว... จึงควรทำให้ enterFrame หยุดทำงานด้วย โดยการ delete มันซะ เมื่อ i>20 จึงได้โค้ดใหม่เป็น
อ้างอิงbutt.onRelease = function() {
i=0;
dot.onEnterFrame = function() {
if(i<20) {
dot._x +=5;
if(dot._x>300) {
dot._x=0;
}
i++;
} else {
delete dot.onEnterFrame;
}
}
}
ปล. รู้ได้ไงว่า enterFrame ยังทำงานอยู่ ในเมื่อ dot มันก็ไม่ขยับแล้วนี่คะ ?
.... ยังจำ
trace จาก ตอนที่ 1 ได้มั๊ยครับ... ลองใส่มันดูภายใน onEnterFrame ด้านนอก if(i<20) นะ ... แล้วจะเห็นว่า แม้ว่า dot จะหยุดวิ่งไปแล้ว... แต่ trace ก็ยังคงทำงานอยู่ตลอดเวลา
จากโค้ดข้างต้น ทำให้ได้ผลดังนี้
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9187
คราวนี้ลองมาดูอะไรสนุกๆ กัน
จากเดิม เราให้
x = x + 5;
ความจริงดูเผินๆ ก็คือ เราบวกค่าให้กับ x ทีละ 5 ใช่ป่ะคับ
แต่ถ้าใครเคยเรียน math มา จะรู้ว่า
x = x + 5 เป็นสมการเส้นตรงทำให้มันวิ่งเป็นเส้นตรงยังไงหล่ะ
ถ้าสมมุติเรารู้ว่าสมการ sin เป็น
สมการรูปคลื่น ดังนั้น ลองเอาสมการ sin มาใช้กับโค้ดเดิมดูซิ๊
สมการ sin รูปแบบพื้นฐาน อยู่ในรูป
y = sin x
เอามาแปลงให้เหมาะสมกับการแสดงผลใน flash เป็น
dot._y = 50*Math.sin(dot._x/10)+50;ดังนั้นเราจะได้โค้ดเป็น
อ้างอิงthis.onEnterFrame = function() {
dot._y = 50*Math.sin(dot._x/10)+50;
dot._x +=3;
if(dot._x>300) {
dot._x=0;
}
}
ก็จะได้ผลดังนี้
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9188
มาลองเล่นสมการรูปอื่นๆบ้าง - สมการ
ดาวกระจายhttp://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9189
ปล. ตัวอย่าง ดาวกระจายข้างต้น.. ผมใช้เทคนิคสร้าง MC ซ้ำด้วย ซึ่งไม่เกี่ยวกับที่จะทำเท่าไหร่ จึงขอละไว้ก่อนนะครับ.. เพียงแต่สมการนี้มันเคลื่นไหวแล้วมองยากว่าเป็นรูปอะไร เลยทำให้มันเป็นหางไว้จะได้ดูง่ายขึ้น
กรี๊ดๆ :25:
สุดยอด...
เข้ามานั่งเรียนแต่เช้า :45:
สุดยอดมาก
โว้วๆๆๆๆ
เทพมากเลยครับ :25:
ตรีโกณ :25:
การบ้าน
มี 2 ข้อนะคับ ข้อแรกก่อน... ข้อสองค่อยตามมา
1) ทำเหมือนตอนที่ 2 ครับ แต่ทำให้มันขยับ วิ่งๆ ได้เก๋ขึ้น โดยอาศัยประโยชน์จาก onEnterFrame ...
เดี๋ยวมั่วมาส่งครับ :08:
อ้างคำพูดจาก: เต่า เมื่อ 06 พ.ค. 2006, 12:40 น.
เดี๋ยวมั่วมาส่งครับ :08:
อย่ามั่วสิคับ.... จริงๆไม่มีอะไรใหม่จากเดิมนะคับ
อย่าไปดูตรงสมการสิ... อันนั้นใส่ให้ดูสนุกๆเฉยๆว่ามันทำอะไรได้อีกจากหลักการข้างต้น
ใช้แค่ช่วงแรก กับ ช่วงที่ 2 นะคับ... ช่วงที่ 3 ขำๆ
ส่งงานค้าบ รวบยอดเลยแล้วกัน
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9198
^
^
ทีแรกนึกว่ารูดำๆ เป็นประตู เดินเข้าไปได้ อุตส่าห์บังคับให้มาที่รูดำ...
แต่มันไม่เห็นมีอะไรเกิดขึ้นเลย
แล้วจะมีรูไปทำไม :34:
ใช่ :30:
โอ้ว... มันส์...
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9199
แค่วางจุดหมุนไว้ที่ปีกครับ ไม่ต้องใช้สติปัญญาอะไรเลย :08:
นอกจาก _rotation
code ยาวเฟื้อยยยย
btnYellow.onRelease = function() {
i = 0;
circle.onEnterFrame = function() {
if (i < 100) {
circle._x ++;
if (circle._x >= 300)
circle._x = 0;
if (circle._x < 0)
circle._x += 300;
i++;
} else {
delete circle.onEnterFrame;
}
}
}
btnBlue.onRelease = function() {
i = 0;
circle.onEnterFrame = function() {
if (i < 100) {
circle._y ++;
if (circle._y >= 300)
circle._y = 0;
if (circle._y < 0)
circle._y += 300;
i++;
} else {
delete circle.onEnterFrame;
}
}
}
btnRed.onRelease = function() {
if (i > 0 && i < 100)
delete circle.onEnterFrame;
}
btnGreen.onRelease = function() {
i = 0;
circle.onEnterFrame = function() {
if (i < 100) {
circle._y++;
circle._x += 20 * Math.sin(circle._y);
if (circle._y >= 300)
circle._y = 0;
if (circle._x >= 300)
circle._x = 0;
if (circle._y < 0)
circle._y += 300;
if (circle._x < 0)
circle._x += 300;
i++;
} else {
delete circle.onEnterFrame;
}
}
}
btnOrange.onRelease = function() {
i = 0;
circle.onEnterFrame = function() {
if (i < 100) {
circle._x++;
circle._y += 20 * Math.sin(circle._x);
if (circle._x >= 300)
circle._x = 0;
if (circle._y >= 300)
circle._y = 0;
if (circle._y < 0)
circle._y += 300;
if (circle._x < 0)
circle._x += 300;
i++;
} else {
delete circle.onEnterFrame;
}
}
}
เอาไว้... เอ่อ... การบ้านข้อ 2 แล้วกันนะครับ จะได้ทำลูกเล่นอะไรนิดหน่อย
เพิ่งเคยใช้ flash จริงๆ นะ จิ้มเล่นมาไม่กี่ครั้งเอง นอกจากใส่เพลง กับใส่วีดีโอ ก็ไอเนี้ย อีกอัน
อ้างคำพูดจาก: เต่า เมื่อ 06 พ.ค. 2006, 13:19 น.
โอ้ว... มันส์...
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9199
แค่วางจุดหมุนไว้ที่ปีกครับ ไม่ต้องใช้สติปัญญาอะไรเลย :08:
นอกจาก _rotation
เดินเหมือนสัตว์ประหลาดในเกม Spore
แต่ไหนปุ่ม :31:
การบ้านไว้ก่อนครับ :42:
อยากเล่น Spore :42:
(เกมนี้ ผมซื้อแผ่นแท้นะครับลุงท็อป)
เต่าแปะโค้ดบ้างสิ :42:
อ้างคำพูดจาก: Saa3 เมื่อ 06 พ.ค. 2006, 13:27 น.
อยากเล่น Spore :42:
(เกมนี้ ผมซื้อแผ่นแท้นะครับลุงท็อป)
ปีหน้าแหน่ะ... (ไม่แน่ว่าจะออกทัน)
เห็นบักตรึม โชว์ทุกที crash ทุกที :42:
อ้างคำพูดจาก: X Saint เมื่อ 06 พ.ค. 2006, 13:31 น.
ปีหน้าแหน่ะ... (ไม่แน่ว่าจะออกทัน)
เห็นบักตรึม โชว์ทุกที crash ทุกที :42:
:08:
แต่ตัวเกมโคตรเจ๋งเลยครับ ลุง Will ก็เล่นแม่ม :30:
(เข้าเรื่อง เดี๋ยวค่อยทำการบ้านมาส่งครับ :31:)
โอ้วววอ้าวววส์ :04:
ฟังก์ชั่นได้ด้วยยย :04:
แล้วที่ว่างของผุ้ที่พิการทางคณิตศาสตร์อย่างผมหายไปไหนครับ :39:
ปล จะพยายาม ลอกมาให้สำเร้จครับ แต่ตอนนี้ปวดหัวมากหลังจากอ่านคำว่า สมการ :08:
เริ่มอ่านไม่รุ้เรื่องตั้งแต่สมการ sin แล้วค่ะ
แย่แล้ว
เลขกิพแย่ไงแย่งั้นมาตลอดเลยแฮะ
ตั้งแต่ประถมจน stat ตัวสุดท้ายที่เพิ่งจบไปนี่แหละ :08:
ปล. ยังไม่มีไอเดียการบ้านค่ะ
:08: อย่าไปดู พวก sin ครับ อันนั้นไม่เกี่ยวอ่ะคับ แค่ให้ดูเฉยๆว่ามันใช้สมการมาเล่นอะไรสนุกๆได้นะ
ดูเฉพาะส่วนที่ 1 กับ 2 ที่อธิบายการเขียน onEnterFrame ก็พอครับ... เพราะเดี๋ยวตอนเอาไปแก้โจทย์ ขยับกรอบ... มันก็ไม่ได้ใช้สมการ sin cos tan น่อ
:05: รู้งี้ไม่ใส่ไปดีกว่า.... :08:
มาแล้วครับการบ้าน นั่งช่วยกันทำกับน้อง 2 คน
http://upload.i-poon.com/flash/gun.swf
อันนี้ code
อ้างอิง
//condition var
intSpeed=70;
angle=-45;
showAngle=angle*(-1);
gun._rotation=angle;
obj._rotation=angle;
//control Panel
butUp.onPress=function(){
_root.onEnterFrame=function(){
if(intSpeed<200){
intSpeed+=2;
}
}
}
butUp.onRelease=function(){
delete _root.onEnterFrame;
}
butUp.onDragOut=function(){
delete _root.onEnterFrame;
}
butDown.onPress=function(){
_root.onEnterFrame=function(){
if(intSpeed>40){
intSpeed-=2;
}
}
}
butDown.onRelease=function(){
delete _root.onEnterFrame;
}
butDown.onDragOut=function(){
delete _root.onEnterFrame;
}
butPowerUp.onPress=function(){
_root.onEnterFrame=function(){
if(angle>-90){
angle-=1;
showAngle=angle*(-1);
gun._rotation=angle;
obj._rotation=angle;
}
}
}
butPowerUp.onRelease=function(){
delete _root.onEnterFrame;
}
butPowerUp.onDragOut=function(){
delete _root.onEnterFrame;
}
butPowerDown.onPress=function(){
_root.onEnterFrame=function(){
if(angle<0){
angle+=1;
showAngle=angle*(-1);
gun._rotation=angle;
obj._rotation=angle;
}
}
}
butPowerDown.onRelease=function(){
delete _root.onEnterFrame;
}
butPowerDown.onDragOut=function(){
delete _root.onEnterFrame;
}
//projectile var
gravity=10;
time=0;
obj.xInt=obj._x;
obj.yInt=obj._y;
//projectile process
butt.onRelease=function(){
rAngle=angle*(Math.PI/180);
xIntSpeed=intSpeed*Math.cos(rAngle);
yIntSpeed=intSpeed*Math.sin(rAngle);
obj.onEnterFrame=function(){
time+=(1/3);
obj.xTile=xIntSpeed*time;
obj.yTile=(yIntSpeed*time)+((0.5)*gravity*time*time);
obj._x=obj.xInt+obj.xTile;
obj._y=obj.yInt+obj.yTile;
obj._rotation+=15;
if(obj._y>=620 || obj._x>=1120){
time=0;
obj._x=obj.xInt;
obj._y=obj.yInt;
delete obj.onEnterFrame;
obj._rotation=angle;
}
}
}
เวลายิงแรงๆไปท้องฟ้า90องศาต้องรอลูกบอลตกลงมาก่อนค่อยกดอีกลูก :08:
:14:
อ้างคำพูดจาก: Bot.net เมื่อ 07 พ.ค. 2006, 08:35 น.
เวลายิงแรงๆไปท้องฟ้า90องศาต้องรอลูกบอลตกลงมาก่อนค่อยกดอีกลูก :08:
คนจริง ใจต้องนิ่งครับ :35:
กลายเป็นโปรเจ็คไตลไปซะงั้น :31:
โอ้ย ไซน์คอสแทน :32:
ทำความรู้จักกับมันเอาไว้ เดี๋ยวโตขึ้นจะต้องสนิทกันมากกว่านี้ :40:
เอาโค้ดไปทำตัว Converter ระหว่าง Celestial Coordinate System ได้ด้วยแฮะ :42:
(แล้วการบ้านล่ะ :05:)
เพิ่งจะเที่ยวกลับมาครับเดี๋ยวนั่งอ่านและทำตามครับขอบคุณครับ
มันคืออะไรน่ะ :08:
... ไอ โคเลสเตอรอล ซิสเตม มันคืออะไรหน่ะ :18:
เซรีบลั่ม ซีฟีลิส อะไรว่ะ :08:
เอาอย่างง่ายๆ ละกัน
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9237
mv1.onEnterFrame=function() {
this._x-=3;
this._y-=1;
this._xscale-=0.5;
this._yscale-=0.5;
if(this._x<-20) {
this._x=290;
this._width=67;
this._height=67;
}
if(this._y<-20) {
this._y=270;
this._width=67;
this._height=67;
}
}
ไว้จะมาอ่าน และทำส่งนะครับเฮีย
เิพิ่งกลับมาถึงบ้าน ไฟดับทั้งหมู่บ้านอีก
แบตก็จะหมดแล้วด้วยครับ
:42:
โอเย ได้แล้ว
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9268
right.onRollOver = function() {
aright.gotoAndPlay(2);
};
right.onRollOut = function() {
aright.gotoAndStop(1);
};
right.onPress = function() {
i = 0;
layiji.onEnterFrame = function() {
if (i<15) {
layiji._x += 2;
if (layiji._x>=520) {
layiji._x = 0;
}
i++;
} else {
delete layiji.onEnterFrame;
}
};
};
left.onRollOver = function() {
aleft.gotoAndPlay(2);
};
left.onRollOut = function() {
aleft.gotoAndStop(1);
};
left.onPress = function() {
i = 0;
layiji.onEnterFrame = function() {
if (i<15) {
layiji._x -= 2;
i++;
if (layiji._x<=0) {
layiji._x = 500;
}
} else {
delete layiji.onEnterFrame;
}
};
};
up.onRollOver = function() {
aup.gotoAndPlay(2);
};
up.onRollOut = function() {
aup.gotoAndStop(1);
};
up.onPress = function() {
i = 0;
layiji.onEnterFrame = function() {
if (i<15) {
layiji._y -= 2;
i++;
if (layiji._y<=-20) {
layiji._y = 420;
}
} else {
delete layiji.onEnterFrame;
}
};
};
down.onRollOver = function() {
adown.gotoAndPlay(2);
};
down.onRollOut = function() {
adown.gotoAndStop(1);
};
down.onPress = function() {
i = 0;
layiji.onEnterFrame = function() {
if (i<15) {
layiji._y += 2;
i++;
if (layiji._y>430) {
layiji._y = -20;
}
} else {
delete layiji.onEnterFrame;
}
};
};
ทำเพิ่มอีกหน่อยครับ เปลี่ยนเป็นปล่อยเมาส์แล้วหยุด
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9271
right.onRollOver = function() {
aright.gotoAndPlay(2);
};
right.onRollOut = function() {
aright.gotoAndStop(1);
};
right.onPress = function() {
p = 3;
layiji.onEnterFrame = function() {
layiji._x += p;
if (layiji._x>510) {
layiji._x = -5;
}
};
};
right.onRelease = function() {
p = 0;
layiji._x += p;
};
left.onRollOver = function() {
aleft.gotoAndPlay(2);
};
left.onRollOut = function() {
aleft.gotoAndStop(1);
};
left.onPress = function() {
p = 3;
layiji.onEnterFrame = function() {
layiji._x -= p;
if (layiji._x<0) {
layiji._x = 500;
}
};
};
left.onRelease = function() {
p = 0;
layiji._x += p;
};
up.onRollOver = function() {
aup.gotoAndPlay(2);
};
up.onRollOut = function() {
aup.gotoAndStop(1);
};
up.onPress = function() {
p = 3;
layiji.onEnterFrame = function() {
layiji._y -= p;
if (layiji._y<-20) {
layiji._y = 420;
}
};
};
up.onRelease = function() {
p = 0;
layiji._y += p;
};
down.onRollOver = function() {
adown.gotoAndPlay(2);
};
down.onRollOut = function() {
adown.gotoAndStop(1);
};
down.onPress = function() {
p = 3;
layiji.onEnterFrame = function() {
layiji._y += p;
if (layiji._y>420) {
layiji._y = -20;
}
};
};
down.onRelease = function() {
p = 0;
layiji._y += p;
};
รอเฮีย x มาสอนต่อ :43:
รู้สึกคนเรียนจะเริ่มหมดแรง :43:
เนื้อหาอาจจะไม่เหมาะสมกับประชากรในบอร์ดเท่าไหร่ แหะๆ...
ก่อนไปตอนต่อไป... มาแปะการบ้านข้อ 2 ที่บอกไว้คับ
การบ้าน
2) ให้ใช้ onEnterFrame กับ onRelease ทำปุ่มอย่างน้อย 3 ปุ่มขึ้นไปให้คุม 1 กรอบขึ้นไป ออกมาเป็น
พวกเว็บที่มีกรอบเยอะ ๆ อย่างเช่นกรอบส่วน banner content link และอื่นๆ แต่พอกดไปกรอบเหล่านี้มันเปลี่นไปมาน่ะครับ
เช่น
(http://img.f0nt.com/image/4011.jpeg)
ซึ่งมันไม่จะเป็นต้องเลือกตามลำตับนะครับ คิดว่าทำ animate คงตายแน่เพราะต้องทำปุ่ม
1ไป2 1ไป3 1ไป4
2ไป1 2ไป3 2ไป4
.....
properties ที่ใช้เพิ่มเติมในการทำการบ้าน คือ
_width หรือ _xscale สำหรับเพิ่ม/ลด ความกว้าง
_height หรือ _yscale สำหรับเพิ่ม/ลด ความสูง
ฉิบหาย เจอมีดตัวเองแทงตัวเองซะแล้ว :05:
:05: ถึกไม่พอแน่เลยค่ะ
ทำไงล่ะนั่น - -"
(ซุ่มลูกเดียวค่ะ :39:)
การบ้านนี้ขอผ่านครับ :39:
ไม่ส่งการบ้านหลายงวดแล้ว ไว้จัดระเบียบความคิดได้เมื่อไหร่ค่อยส่งครับ :39:
:30:
ไม่ว่างครับ :05:
The Match ก็ไม้่ได้ทำซักแอะ :05:
หยั่งงี้ก็ลอกโค้ดจานท๊อปได้ดิคับ :42:
คล้ายๆ แบบนี้เหรอ
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9294
อ้างคำพูดจาก: X11 เมื่อ 12 พ.ค. 2006, 00:15 น.
คล้ายๆ แบบนี้เหรอ
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9294
คล้ายๆแบบนี้แต่
ต้องให้มันเลื่อนๆด้วยไง ไม่งั้นไม่ได้ใช้ประโยชน์จาก onEnterFrame ครับ (อันนี้สำคัญ เพราะทำให้ยากขึ้น ในการทำความเข้าใจ)
ความจริงการบ้านตัวนี้ไม่ต่างกับที่ทำๆ กดปุ่มให้มันวิ่ง ขึ้น บน ซ้าย ขวาเท่าไหร่คับอาศัยหลักการเดียวกัน เพียงแต่เพิ่ม _width และ _height เข้าไป
จากตัวอย่างเดิมอันข้างล่างนี้... และ
จากเนื้อหา 3 ตอนที่ผ่านมา สามารถทำแบบนี้ได้แล้ว
ยกเว้นการ easing ซึ่งจะเป็นตอนต่อไป...
http://f0nt.com/forum/index.php?action=dlattach;topic=5804.0;id=9076
แต่
ที่ตั้งใจยกโจทย์นี้มาเป็นการบ้าน เพื่อให้แน่ใจว่าเข้าใจหลักการเล่นกับ properties การใช้ onEnterFrame คู่กับการกำหนดเงื่อนไข ผ่าน if คับ.... โค้ดที่จะทำการบ้านนี้ รับรองไม่ยาวกว่าที่ทำบังคับวิ่งขึ้นบน ซ้ายขวา เท่าไหร่เลย...
ไม่ต้องถึกครับ :12:
อ้างคำพูดจาก: X Saint เมื่อ 12 พ.ค. 2006, 01:02 น.
จากตัวอย่างเดิมอันข้างล่างนี้... และจากเนื้อหา 3 ตอนที่ผ่านมา สามารถทำแบบนี้ได้แล้ว
ยกเว้นการ easing ซึ่งจะเป็นตอนต่อไป...
เจ๋งงงงงงงงงงงงงงง :25: :25: :25:
พยายามไม่ลอกครับ จะลองคิดเองดู แต่คงนานเลยล่ะครับ
ขอถามนอกเรื่องนิดนึงนะครับ
สมมุติ instance name ของ mc ถูกเก็บในตัวแปรชื่อ newInsName ถ้าเราต้องการเข้าถึงตัวแปรหรือ Properties ของ instance ตัวนั้น เราต้องเรียกมันยังไงครับ
ผมลองใช้ newInsName.ชื่อตัวแปร หรือ newInsName._x แล้วมันเรียกไม่ออกอ่ะ :05:
ผ่านครับ(ผ่่านทุกการบ้าน :05:)
อ้างคำพูดจาก: Layiji เมื่อ 12 พ.ค. 2006, 10:07 น.
พยายามไม่ลอกครับ จะลองคิดเองดู แต่คงนานเลยล่ะครับ
กลับไปดูกระทู้เก่าก็ได้คับ.... คือ ยังไงก็จะออกมาไม่เหมือนกัน เพราะขาดส่วน easing
แล้วก็โครงสร้างจริงๆ ก็ควรจะคล้ายๆกับที่ทำ เคลื่อนที่บน ล่าง ซ้าย ขวา ที่ผ่านมา
อ้างคำพูดจาก: i-poon เมื่อ 12 พ.ค. 2006, 10:43 น.
ขอถามนอกเรื่องนิดนึงนะครับ
สมมุติ instance name ของ mc ถูกเก็บในตัวแปรชื่อ newInsName ถ้าเราต้องการเข้าถึงตัวแปรหรือ Properties ของ instance ตัวนั้น เราต้องเรียกมันยังไงครับ
ผมลองใช้ newInsName.ชื่อตัวแปร หรือ newInsName._x แล้วมันเรียกไม่ออกอ่ะ :05:
ทำไมถึงอยากเก็บในตัวแปรเหรอคับ ?
ความจริงเก็บได้คับ... แต่พอดีโจทย์นี้ยังไม่ค่อยจำเป็นเท่าไหร่
แต่อธิบายก่อนคร่าวๆได้ว่า (เผื่ออยากใช้)
mc นั้น flash มองมันเป็น object
ในขณะที่ตัวแปรจะเก็บค่าเป็น integer จำนวนเต็ม char ตัวอักษร หรือ string ชุดตัวอักษร เป็นต้น
ดังนั้นการอ้างอิงแบบนั้นเลยทำไม่ได้ครับ
ดังนั้นเราต้องอ้างชื่อแบบ string โดยผ่านการเรียกแบบ object เช่น
ถ้า
newInsName = "dot";แล้ว mc นี้ dot วางอยู่ที่ Tiimeline หลัก
เราสามารถเรียกผ่านตัวแปรได้ในรูป
_root[newInsName]._x เป็นต้นครับ
เดี๋ยวก่อน... เดี๊ยว.... :07:
จะเปิดเทอมแล้ว
โอ้ว ขอบคุณมากครับ เพิ่งรู้ว่า =dot กับ ="dot" นี่มันต่างกันด้วยแฮะ :08:
จริงๆแล้วอันนี้ไม่เกี่ยวกับการบ้านครับ ตั้งแต่ลุงท๊อปเริ่มสอนผมก็มันส์มือหัดมันไปเรื่อยๆ เจอข้อสงสัยเลยลองถามดูครับ :22:
xsaint ฟิตมาจากไหนเนี่ย นึกว้าแขวนนวมไปซะแล้ว ...
อ้างคำพูดจาก: ไร้รัก เมื่อ 13 พ.ค. 2006, 01:37 น.
xsaint ฟิตมาจากไหนเนี่ย นึกว้าแขวนนวมไปซะแล้ว ...
หึ หึ ลมอะไรพัดมาถึงนี่ ท่านแฟลชเทวะ :/
ใครเหรอครับนั่น :08:
เสร็จแล้ว!!!! :32:
ลองมั่วๆทำให้มี easing ดู ไม่รู้มันถูกหลักการหรือเปล่านะครับ :43:
http://upload.i-poon.com/flash/actionMove.swf
//แปะ code
อ้างอิง
obj1.onEnterFrame=function(){
obj1XSpeed=(o1X-obj1._x)/2;
obj1YSpeed=(o1Y-obj1._y)/2;
obj1WSpeed=(o1Width-obj1._width)/2;
obj1HSpeed=(o1Height-obj1._height)/2;
obj1._x+=obj1XSpeed;
obj1._y+=obj1YSpeed;
obj1._width+=obj1WSpeed;
obj1._height+=obj1HSpeed;
}
obj2.onEnterFrame=function(){
obj2XSpeed=(o2X-obj2._x)/2;
obj2YSpeed=(o2Y-obj2._y)/2;
obj2WSpeed=(o2Width-obj2._width)/2;
obj2HSpeed=(o2Height-obj2._height)/2;
obj2._x+=obj2XSpeed;
obj2._y+=obj2YSpeed;
obj2._width+=obj2WSpeed;
obj2._height+=obj2HSpeed;
}
obj3.onEnterFrame=function(){
obj3XSpeed=(o3X-obj3._x)/2;
obj3YSpeed=(o3Y-obj3._y)/2;
obj3WSpeed=(o3Width-obj3._width)/2;
obj3HSpeed=(o3Height-obj3._height)/2;
obj3._x+=obj3XSpeed;
obj3._y+=obj3YSpeed;
obj3._width+=obj3WSpeed;
obj3._height+=obj3HSpeed;
}
obj4.onEnterFrame=function(){
obj4XSpeed=(o4X-obj4._x)/2;
obj4YSpeed=(o4Y-obj4._y)/2;
obj4WSpeed=(o4Width-obj4._width)/2;
obj4HSpeed=(o4Height-obj4._height)/2;
obj4._x+=obj4XSpeed;
obj4._y+=obj4YSpeed;
obj4._width+=obj4WSpeed;
obj4._height+=obj4HSpeed;
}
pum1.onRelease=function(){
o1X=224.4;
o1Y=120;
o1Width=219.1;
o1Height=219.1;
o2X=366.2;
o2Y=120;
o2Width=52.5;
o2Height=219.1;
o3X=224.4;
o3Y=259.8;
o3Width=219.1;
o3Height=52.5;
o4X=366.2;
o4Y=259.8;
o4Width=52.5;
o4Height=52.5;
}
pum2.onRelease=function(){
o1X=95;
o1Y=214.2;
o1Width=90;
o1Height=90;
o2X=156.5;
o2Y=214.2;
o2Width=21;
o2Height=89.9;
o3X=306;
o3Y=139.6;
o3Width=262.7;
o3Height=238.5;
o4X=243.6;
o4Y=272.8;
o4Width=387.1;
o4Height=17.2;
}
pum3.onRelease=function(){
o1X=48.3;
o1Y=73;
o1Width=40.6;
o1Height=40;
o2X=256.4;
o2Y=160;
o2Width=361.6;
o2Height=214.1;
o3X=48.3;
o3Y=128.4;
o3Width=40.6;
o3Height=59.1;
o4X=48.3;
o4Y=215.7;
o4Width=40.6;
o4Height=102.7;
}
อ้างคำพูดจาก: i-poon เมื่อ 14 พ.ค. 2006, 07:57 น.
เสร็จแล้ว!!!! :32:
ลองมั่วๆทำให้มี easing ดู ไม่รู้มันถูกหลักการหรือเปล่านะครับ :43:
เสร็จแล้ว :34:
แต่บอกไม่ต้องมี easing ก่อนไง :34:
เดี๋ยวก็ไม่มีอะไรอธิบายตอนต่อไปหรอก :34: :34:
แต่ทำไมวิธีการมันไม่เหมือนกับที่อธิบายไปก่อนหน้านี้ 3 ตอนเลย :34: :34: :34:
แต่จริงๆ ก็ได้ผลลัพธ์ถูกต้องนะคับ วิธีการยังไงก็ได้แหล่ะ :42:
เก่งคับ :12:
...
ว่าแต่... มีคนทำคนเดียวเองเหรอ :39:
รอผมสักหน่อยนะ กำลังคิดวิธีการโดยไม่ลอกใครอยู่ครับ นานเลย
ผม... เอ่อ.... ทำอะไรอยู่วะ... :42:
เดี๋ยวอาทิตย์จะงมมาส่งครับ
แต่ที่อธิบายไว้ 3 ตอนก่อนนั่นผมก็ยังคงมึนๆ จับทางไม่ค่อยถูกอยู่ดีครับ :05:
ไม่ easing ละกัน
http://f0nt.com/forum/index.php?action=dlattach;topic=5925.0;id=9377
border=3;
bx1.name1.text="1";
bx2.name1.text="2";
bx3.name1.text="3";
bx4.name1.text="4";
bx1size=array(294, 60);
bx2size=array(200, 113);
bx3size=array(90, 55);
bx4size=array(90, 55);
bx1._alpha=40;
bx2._alpha=40;
bx3._alpha=40;
bx4._alpha=40;
bx1._x=border;
bx1._y=border;
bx1._width=bx1size[0];
bx1._height=bx1size[1];
bx2._x=border;
bx2._y=border+bx1._height+border;
bx2._width=bx2size[0];
bx2._height=bx2size[1];
bx3._x=border+bx2._width+border;
bx3._y=border+bx1._height+border;
bx3._width=bx3size[0];
bx3._height=bx3size[1];
bx4._x=border+bx2._width+border;
bx4._y=border+bx1._height+border+bx3._height+border;
bx4._width=bx4size[0];
bx4._height=bx4size[1];
bx1.onRelease=function() {
bx1._alpha=100;
bx2._alpha=40;
bx3._alpha=40;
bx4._alpha=40;
_root.onEnterFrame=function() {
if(bx1._height<(bx1size[1]+20)) bx1._height+=1;
else if (bx1._height > (bx1size[1]+20)) bx1._height-=1;
if (bx1._width < bx1size[0]) bx1._width+=1;
else if (bx1._width > bx1size[0]) bx1._width-=1;
bx1._x=border;
bx1._y=border;
if(bx2._width < bx2size[0]) bx2._width+=1;
else if (bx2._width > bx2size[0]) bx2._width-=1;
//trace(bx2._width+'/'+bx2size[0]);
if(bx2._height < (bx2size[1]-20)) bx2._height+=1;
else if (bx2._height > (bx2size[1]-20)) bx2._height-=1;
bx2._x=border;
bx2._y=border+bx1._height+border;
if(bx3._width < bx3size[0]) bx3._width+=1;
else if (bx3._width > bx3size[0]) bx3._width-=1;
if(bx3._height < (bx3size[1]-20)) bx3._height+=1;
else if(bx3._height > (bx3size[1]-20)) bx3._height-=1;
bx3._x=border+bx2._width+border;
bx3._y=border+bx1._height+border;
if(bx4._width < bx4size[0]) bx4._width+=1;
else if (bx4._width > bx4size[0]) bx4._width-=1;
if (bx4._height < bx4size[1]) bx4._height +=1;
else if (bx4._height > bx4size[1]) bx4._height -=1;
bx4._x=border+bx2._width+border;
bx4._y=border+bx1._height+border+bx3._height+border;
}
}
bx2.onRelease=function() {
bx1._alpha=40;
bx2._alpha=100;
bx3._alpha=40;
bx4._alpha=40;
_root.onEnterFrame=function() {
if(bx1._height<(bx1size[1]-20)) bx1._height+=1;
else if (bx1._height>(bx1size[1]-20)) bx1._height-=1;
//trace(bx1._height+'/'+(bx1size[1]-20));
if (bx1._width < bx1size[0]) bx1._width+=1;
else if (bx1._width > bx1size[0]) bx1._width-=1;
bx1._x=border;
bx1._y=border;
if(bx2._width < bx2size[0]) bx2._width+=1;
else if (bx2._width > bx2size[0]) bx2._width-=1;
//trace(bx2._width+'/'+bx2size[0]);
if(bx2._height < (bx2size[1]+20)) bx2._height+=1;
else if (bx2._height > (bx2size[1]+20)) bx2._height-=1;
//trace(bx2._height+"/"+(bx2size[1]+20));
bx2._x=border;
bx2._y=border+bx1._height+border;
if(bx3._width < bx3size[0]) bx3._width+=1;
else if (bx3._width > bx3size[0]) bx3._width-=1;
if(bx3._height < (bx3size[1]+20)) bx3._height+=1;
else if(bx3._height > (bx3size[1]+20)) bx3._height-=1;
bx3._x=border+bx2._width+border;
bx3._y=border+bx1._height+border;
if(bx4._width < bx4size[0]) bx4._width+=1;
else if (bx4._width > bx4size[0]) bx4._width-=1;
if (bx4._height < bx4size[1]) bx4._height +=1;
else if (bx4._height > bx4size[1]) bx4._height -=1;
bx4._x=border+bx2._width+border;
bx4._y=border+bx1._height+border+bx3._height+border;
}
}
bx3.onRelease=function() {
bx1._alpha=40;
bx2._alpha=40;
bx3._alpha=100;
bx4._alpha=40;
_root.onEnterFrame=function() {
if(bx1._height<(bx1size[1]-20)) bx1._height+=1;
else if (bx1._height > (bx1size[1]-20)) bx1._height-=1;
if (bx1._width < bx1size[0]) bx1._width+=1;
else if (bx1._width > bx1size[0]) bx1._width-=1;
bx1._x=border;
bx1._y=border;
if(bx2._width < bx2size[0]) bx2._width+=1;
else if (bx2._width > bx2size[0]) bx2._width-=1;
//trace(bx2._width+'/'+bx2size[0]);
if(bx2._height < (bx2size[1]+20)) bx2._height+=1;
else if (bx2._height > (bx2size[1]+20)) bx2._height-=1;
bx2._x=border;
bx2._y=border+bx1._height+border;
if(bx3._width < bx3size[0]) bx3._width+=1;
else if (bx3._width > bx3size[0]) bx3._width-=1;
if(bx3._height < (bx3size[1]+20)) bx3._height+=1;
else if(bx3._height > (bx3size[1]+20)) bx3._height-=1;
bx3._x=border+bx2._width+border;
bx3._y=border+bx1._height+border;
if(bx4._width < bx4size[0]) bx4._width+=1;
else if (bx4._width > bx4size[0]) bx4._width-=1;
if (bx4._height < bx4size[1]) bx4._height +=1;
else if (bx4._height > bx4size[1]) bx4._height -=1;
bx4._x=border+bx2._width+border;
bx4._y=border+bx1._height+border+bx3._height+border;
}
}
bx4.onRelease=function() {
bx1._alpha=40;
bx2._alpha=40;
bx3._alpha=40;
bx4._alpha=100;
_root.onEnterFrame=function() {
if(bx1._height<bx1size[1]) bx1._height+=1;
else if (bx1._height > bx1size[1]) bx1._height-=1;
if (bx1._width < bx1size[0]) bx1._width+=1;
else if (bx1._width > bx1size[0]) bx1._width-=1;
bx1._x=border;
bx1._y=border;
if(bx2._width < bx2size[0]) bx2._width+=1;
else if (bx2._width > bx2size[0]) bx2._width-=1;
//trace(bx2._width+'/'+bx2size[0]);
if(bx2._height < bx2size[1]) bx2._height+=1;
else if (bx2._height > bx2size[1]) bx2._height-=1;
bx2._x=border;
bx2._y=border+bx1._height+border;
if(bx3._width < bx3size[0]) bx3._width+=1;
else if (bx3._width > bx3size[0]) bx3._width-=1;
if(bx3._height < (bx3size[1]-20)) bx3._height+=1;
else if(bx3._height > (bx3size[1]-20)) bx3._height-=1;
bx3._x=border+bx2._width+border;
bx3._y=border+bx1._height+border;
if(bx4._width < bx4size[0]) bx4._width+=1;
else if (bx4._width > bx4size[0]) bx4._width-=1;
if (bx4._height < bx4size[1]+20) bx4._height +=1;
else if (bx4._height > bx4size[1]+20) bx4._height -=1;
bx4._x=border+bx2._width+border;
bx4._y=border+bx1._height+border+bx3._height+border;
}
}
back.onRelease=function() {
bx1._alpha=40;
bx2._alpha=40;
bx3._alpha=40;
bx4._alpha=40;
_root.onEnterFrame=function() {
if(bx1._height<bx1size[1]) bx1._height+=1;
else if (bx1._height > bx1size[1]) bx1._height-=1;
if (bx1._width < bx1size[0]) bx1._width+=1;
else if (bx1._width > bx1size[0]) bx1._width-=1;
bx1._x=border;
bx1._y=border;
if(bx2._width < bx2size[0]) bx2._width+=1;
else if (bx2._width > bx2size[0]) bx2._width-=1;
//trace(bx2._width+'/'+bx2size[0]);
if(bx2._height < bx2size[1]) bx2._height+=1;
else if (bx2._height > bx2size[1]) bx2._height-=1;
bx2._x=border;
bx2._y=border+bx1._height+border;
if(bx3._width < bx3size[0]) bx3._width+=1;
else if (bx3._width > bx3size[0]) bx3._width-=1;
if(bx3._height < bx3size[1]) bx3._height+=1;
else if(bx3._height > bx3size[1]) bx3._height-=1;
bx3._x=border+bx2._width+border;
bx3._y=border+bx1._height+border;
if(bx4._width < bx4size[0]) bx4._width+=1;
else if (bx4._width > bx4size[0]) bx4._width-=1;
if (bx4._height < bx4size[1]) bx4._height +=1;
else if (bx4._height > bx4size[1]) bx4._height -=1;
bx4._x=border+bx2._width+border;
bx4._y=border+bx1._height+border+bx3._height+border;
}
}
:05:
:44: เห็นแล้วขี้เกียจเลย
ยาวโครต :32:
อ้างคำพูดจาก: เต่า เมื่อ 14 พ.ค. 2006, 16:00 น.
ผม... เอ่อ.... ทำอะไรอยู่วะ... :42:
เดี๋ยวอาทิตย์จะงมมาส่งครับ
วันอังคารแล้วนี่ :34:
มาแอบเก็บครัวามรู้ครับ อิอิอิอิ.. :43:
เหอะ.... :08: สงสัยจะยากไป.... หายหมดเลย :43:
เดี๋ยวมาเฉลยการบ้านข้อนี้นะคับ.. เพราะคิดว่าจะได้เป็นฐานสำหรับตอนต่อไป
(ยังจะมีอีกเหรอเนี่ย :38:)
(ไหนๆทำไปแล้ว ให้มันจบๆซีซันหน่อยละกันนะ :42:)
เอ้ยอย่าเพิ่งจบนะครับ ผมกำลังคิดอยู่
ถ้ายังไงขอรีเควสเรื่อง load movie กับ ติดต่อ php สักติ๊ดได้มั้ยครับ :02:
:08:
(นั่งทำตาปริบๆ ไม่รู้เรื่อง)
กำลังรอติดตามตอนต่อไปอยู่เช่นกันครับ :12:
เปิดเทอม ม.4 มันยุ่งขนาดนี้เลย... :05:
จะเปิดคอมก็ยังไม่มีเวลาอู้เข้าบอร์ดฟ๐นต์เลยครับ...
อ้างคำพูดจาก: เต่า เมื่อ 19 พ.ค. 2006, 05:35 น.
เปิดเทอม ม.4 มันยุ่งขนาดนี้เลย... :05:
จะเปิดคอมก็ยังไม่มีเวลาอู้เข้าบอร์ดฟ๐นต์เลยครับ...
ชะตากรรมเดียวกันแล้วล่ะ หนักฉิบหาย :39:
อ้างคำพูดจาก: เต่า เมื่อ 19 พ.ค. 2006, 05:35 น.
จะเปิดคอมก็ยังไม่มีเวลาอู้เข้าบอร์ดฟ๐นต์เลยครับ...
แล้วนี่อยู่ใน board พันทิพรึ๊ไง :26:
ตอนนี้ไม่ได้เปิดคอมครับ เลยอู้เข้าบอร์ดฟ๐นต์ได้ :42:
จ๊าก เพิ่งเจอจู๋นี้
อะไรจะขนาดไหนจะขนาดนู้นจะขนาดนี้ครับลุงงงงง :07:
เดี๋ยวหัดมั่งครับ เพิ่งเคลียร์งานเสร็จ 1 ชิ้น (ค่าจ้างแค่กินข้าวได้ 2-3 วัน :05: )
แต่เดี๋ยวขอญาตหัดหลังเดอะแหม็ดครับ