LevelUp! Studio » class https://blog.levelup.in.th Experience the new world. Fri, 26 May 2017 10:06:07 +0000 th hourly 1 http://wordpress.org/?v=3.8.1 addFrameScript with parameters https://blog.levelup.in.th/2009/12/01/addframescript-with-parametersaddframescript-with-parameters/ https://blog.levelup.in.th/2009/12/01/addframescript-with-parametersaddframescript-with-parameters/#comments Mon, 30 Nov 2009 18:32:22 +0000 http://blog.levelup.in.th/?p=335 AS3 จะมีฟังค์ชัน addFrameScript เป็นฟังค์ชั่นของออบเจค MovieClip ใช้สำหรับให้รันฟังค์ชันที่กำหนดไว้เมื่อ movieClip รันมาถึงเฟรมที่เรากำหนดไว้

MovieClip.addFrameScript(frame_number:uint,function_to_call:Function)

frame_number – เฟรมที่เราต้องการให้ฟังค์ชั่นของเราเริ่มทำงาน มีการลำดับเฟรมแบบเริ่มต้นที่ 0

function_to_call – ฟังค์ชันที่เราต้องการให้เรียก

function helloworld ()

{

trace( “hello world!” );

}

this.addFrameScript( 1, helloworld );

แต่เราไม่สามารถใช้ตัวแปรอะไรเข้าไปในฟังค์ชันได้เลย แต่มีวิธีที่จะทำให้ส่งผ่านตัวแปรได้ คือ เอาชื่อหัวข้อไป search google ก็เจอ = =” อันนี้เป็นวิธีของ Ian Thomas delegate class.

โดยเราจะสร้าง class delegate ขึ้นมา หน้าตาจะเป็นแบบข้างล่าง

package
{

public class Delegate

{

public static function create(handler:Function,…args):Function

{

return function(…innerArgs):void

{

handler.apply(this,innerArgs.concat(args));

}

}

}

}

โดย Delecate.create() จะเป็นฟังค์ชันที่จะช่วยให้เราใช้ตัวแปรใน addFrameScript ได้

วิธีใช้

public function example()

{

for (var i:int=0;i<10;i++)

{

var mc:MovieClip = new Quad() as MovieClip;

addChild(mc);

mc.addFrameScript( mc.totalFrames-1, Delegate.create(myFunction,i) );

}

}

private function myFunction(i:int):void

{

trace(i);

}

Delegate.create( function_to_call:Function, arg1, arg2, … )

unction_to_call – ฟังค์ชันที่เราต้องการให้เรียก

arg1, arg2, … – ตัวแปรที่ต้องการส่งเข้าฟังค์ชัน

]]>
https://blog.levelup.in.th/2009/12/01/addframescript-with-parametersaddframescript-with-parameters/feed/ 0
As3 Class from string https://blog.levelup.in.th/2009/11/30/as3-class-from-stringas3-class-from-string/ https://blog.levelup.in.th/2009/11/30/as3-class-from-stringas3-class-from-string/#comments Mon, 30 Nov 2009 07:49:19 +0000 http://blog.levelup.in.th/?p=280 เรื่องมันมีอยู่ว่า…

จะทำ Effect ในเกม Flash โดยให้เพิ่ม Effect ง่ายๆโดยไม่ต้องโค้ดใหม่ให้วุ่นวาย เลยจำเป็นที่ต้อง

ก็ไปหาโค้ดมาตามปกติ

var AnyClassName:String = "Effect_Some";
var ClassReference:Class = getDefinitionByName(AnyClassName) as Class;
var o = new ClassReference();

เรื่องก็น่าจะจบตรงนี้ เหมือนจะง่ายๆ แต่มันมีปัญหาว่า มันบั๊ก!

สุดท้ายก็ได้ข้อสรุปว่า ถ้าจะเรียก Class ตามวิธีข้างบนนี้ Class นั้นต้องเคยถูกเรียกใช้มาก่อนครั้งนีง! Chip lost ซิท่าน!

ตอนแรกก็เลยต้องถูกไถไปประมาณนี้

new effect_missile();

new effect_frost();

new effect_burn();

new effect_spark();

new effect_stun();

แต่ดูอนาคตมันมืดมนชะมัด สิ้นหวังแล้ว!

สุดท้ายก็ลองหาเรื่องปัญหานี้อีกครั้งจนพบทางสว่าง

http://synja.com/?tag=getdefinitionbyname

วิธีง่ายๆไม่ได้ต้องใช้สมองอะไรมาก เพียงแค่เพิ่ม

-include-libraries “/absolute/path/to/my/assets/assets.swc”

เข้าไปใน Complier Option ก็จบเรียบร้อย

จริงๆเหมือนจะมีวิธีอีกหลายวิธี แต่ดูยุ่งยาก ใช้อันนี้ก็ Work เลยจบ

]]>
https://blog.levelup.in.th/2009/11/30/as3-class-from-stringas3-class-from-string/feed/ 0