การเปลี่ยนโค้ดดิ้งจาก ActionScript มาเป็น C# by

30
Apr
0

หลังจากที่ปัจจุบันเกมต่างๆได้ย้ายไปทำใน Unity กันซะหมด ผมเลยต้องเริ่มเรียนภาษาใหม่มาแทน ActionScript ที่คล่องมือมาหลายปี ส่วนอะไรที่ใช้ง่ายๆก็ถูกเปลี่ยนไปซะหมด เลยจะมาบอกส่วนสำคัญๆในการโค้ดดิ้งเกมสักสามอย่างครับ

Number = float

จากปกติแล้วใน AS เราจะใช้ Number, int ซะส่วนมาก ซึ่ง c# นี้ไม่มี “Number” ซึ่งให้เราใช้ float
float myFloat = 0.5f;
จะเห็นได้ว่า “f” ต่อท้ายนั้นเป็นการระบุด้วยว่าค่านี้จะเป็น float ซึ่งถ้าไม่ใส่จะติด Error นะครับ

การหาใดๆหรือคำนวณใดๆก็ตามถ้าเราคิดว่าคำต้องมีทศนิยมแน่ๆ ให้เราใส่ float ไว้ก่อนเลยครับ
float i = 15f;
float j = 10f;
float divide = i / j; // 1.5f

ในการเปลี่ยน float ให้เป็น int ก็ต้องใช้ FloorToInt() เพราะ c# ไม่ได้อิสระเหมือนกับ AS เท่าไรนัก
int value = Mathf.FloorToInt(float n);

Event Dispatching

ใน AS นั้นทุกๆอย่างสามารถ dispatch event ได้ทั้งหมด แต่พอมาใน Unity  C# แล้วต้องมีการปรับกันใหม่ล่ะครับ

  • ประกาศ delegate ด้านนอก class

public delegate void LoadComplete(float value);
public class MyClass
{
//...
}

  • สร้าง event ด้านใน class

public delegate void LoadComplete(float value);
public class MyClass
{
public event LoadComplete LoadCompleteEvent;
}

  • ใส่ listener โดยการเพิ่ม delegate instance โดยมี handler ให้กับ LoadCompleteEvent

public delegate void LoadComplete(float value);
public class MyClass
{
public event LoadComplete LoadCompleteEvent;
public void Start()
{
LoadCompleteEvent += new LoadComplete(HandleLoadComplete);
}
//note how the argument signature matches the delegate declaration
private void HandleLoadComplete(float someValue)
{
//event handled here
}
}

  • ใช้ event โดยการเช็คว่าไม่ใช่ null แล้วจึงเรียก event นั้นๆ

public void DoSomething()
{
if( LoadCompleteEvent != null ) LoadCompleteEvent(1.0f);
}

  • ลบ listener ด้วยการ ลบ handler ออกจาก event

LoadCompleteEvent -= HandleLoadComplete;

 

Coroutines (ใช้แทน setTimeout, setInterval, Timer)

ใน AS เราจะใช้ setTimeout(), setInterval() หริอไม่ก็ Timer เลยเพื่อจัดการกับการรอหรือการวนลูปตามเวลา แต่พอมาใน Unity C# มันจะยุ่งยากขึ้นดังนี้

  • ถ้าต้องการจะวนลูปหรือรอเป็นเวลาขณะหนึ่ง ให้เรียก method ที่มีการรีเทิร์นค่าเป็น IEnumerator

public IEnumerator DoMyBidding() {...};

  • จากนั้นใส่ WaitForSeconds()  และก็ทำการ yield return ใน method

public IEnumerator DoMyBidding()
{
yield return WaitForSeconds(1.5f);
if( myConditionNotMet ) yield return null; // this is how you just simply return out if you no longer wish to continue.
}

  • ถ้าต้องการที่จะวนลูปเรื่อยๆ

public IEnumerator MonitorMe()
{
while ( conditionNotMet )
{
// do something
yield return WaitForSeconds(.025f);
}
}

  • ในการใช้ method ที่จะวนลูปม้ใช้เรียกด้วย StartCoroutine():

public void Start()
{
StartCoroutine( MonitorMe() );
}

สามอย่างนี้ก็จะช่วยทำให้เราเข้าถึง Unity C# จากการที่เราคุ้นเคยกับ AS ได้มากขึ้นแล้วล่ะครับ

credits : http://rockonflash.wordpress.com/2010/10/20/unity3d-development-actionscriptunityscript-to-c-tips/

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน