การเปลี่ยนโค้ดดิ้งจาก 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/

ลงสีผมง่ายๆ by

30
Apr
0

1. ลงสีพื้นของผม

2.กำหนดทิศทางแสง แล้วก็ปาดเงา

3.ปาดเงาชั้นที่ 2

4.ใช้สร้างเลเยอร์ใหม่แล้วตั้งเป็น Multiply แล้วปาดเพื่อเพิ่มน้ำหนักเงา

5.ใส่ Highlight ตรงพื้นที่ที่แสงกระทบ

6.ใส่แสงเพิ่มโดนสร้างเลเยอร์แล้วตั้งเป็น Overlay แล้วก็ปาดซะ

7.ตกแต่งให้เรียบร้อย

เสร็จแล้วเน้ออ~~ :v

mysqli by

30
Apr
0

mysqli ย่อมาจาก mysql improved หรือชุดคำสั่งสำหรับติดต่อ mysql server ที่พัฒนามากขึ้น โดยมีจุดที่ดีกว่า mysql ตรงที่

Object-oriented interface
เมื่อสั่งคำสั่งติดต่อกับ mysql หรือทำการ query ข้อมูล จะไม่ออกมาเป็นตัวแปรค่าผสม (mixed value) แล้วนะครับ จะได้เป็น object มาแทน และตัว object นี้จะสามารถใช้ method ในตัวมันได้เลย จึงทำให้การเขียนติดต่อกับ mysql หลายๆ server พร้อมกันง่ายขึ้น

Support non-blocking, asynchronous queries with mysqlnd
สนับสนุนการทำ query แบบ async เหมาะกับคำสั่ง INSERT , UPDATE หรือ DELETE โดยไม่จำเป็นต้องรอให้คำสั่งนั้นเสร็จก่อน สามารถทำคำสั่ง php ถัดไปได้เลย

Support for Prepared Statements
ว่ากันง่ายๆคือการเตรียมคำสั่ง query เอาไว้ที่ mysql server จากนั้นก็ทำการส่งแค่ค่าตัวแปรบางตัวไป call query บน server เหมาะกับการใช้คำสั่งซ้ำบ่อยๆ

Support for Multiple Statements
สนับสนุนการทำคำสั่งพร้อมๆกันหลายๆคำสั่ง

Support for Transactions
สนับสนุนการทำ Transactions

Enhanced debugging capabilities
ช่วยในการ debug code query ของ mysql มากขึ้น

Embedded server support
สนับสนุน Embedded server (มันคืออะไร อยากรู้เหมือนกันแฮะ) คัดลอกบางส่วนจากที่นี่

อีกทั้งฝั่ง php ประกาศแล้วว่า mysql จะถูก deprecated ใน version 5.5 และจะ removed ใน version ถัดไปด้วย
รวมถึงประสิทธิภาพโดยรวมของการใช้ mysqli แทน mysql จะดีขึ้นกว่าเดิม

เทียบคำสั่งระหว่าง mysql และ mysqli
// เชื่อมต่อฐานข้อมูล (connect)
$link = mysql_connect(“host”,”username”,”password”); // mysql
$db = new mysqli(“host”,”username”,”password”); // mysqli

// เลือกฐานข้อมูล (schema)
mysql_select_db(“database name”,$link); // mysql
$db->select_db(“database name”); // mysqli

// ส่งคำสั่ง (query)
$result = mysql_query(“STATEMENT”,$link); // mysql
$result = $db->query(“STATEMENT”); // mysqli

// แกะข้อมูล 1 แถว (fetch array)
$data = mysql_fetch_array($result); // mysql
$data = $result->fetch_array(); // mysqli

// แกะข้อมูลครบทุกแถว (fetch all array)
while ($row = mysql_fetch_array($result)){ } // mysql
while ($row = $result->fetch_array()){ } // mysqli

// หมายเลข id ที่แทรกข้อมูล (insert id)
$insert_id = mysql_insert_id($link); // mysql
$insert_id = $db->insert_id; // mysqli เก็บเป็นตัวแปร ไม่ได้สั่งผ่าน method

// จำนวนแถวที่มีการเปลี่ยนแปลง (affected rows)
$affected_rows = mysql_affected_rows($link); // mysql
$affected_rows = $db->affected_rows; // mysqli เก็บเป็นตัวแปร ไม่ได้สั่งผ่าน method

// จำนวนแถวที่ query มาได้ (number of rows)
$num_rows = mysql_num_rows($result); // mysql
$num_rows = $result->num_rows; // mysqli เก็บเป็นตัวแปร ไม่ได้สั่งผ่าน method

// Real escaped string
$esc_string = mysql_escape_string($string); // mysql
$esc_string = $db->escape_string($string); // mysqli

android is not safe by

30
Apr
0

ทำไมผมถึงพูดอย่างนี้ถูกไหมครับ เพราะเพื่อนหลายคนที่ใช้งาน android อยู่มักจะหา app lock หน้าจอมาใช้งานกันแต่ก็นั้นและครับ มันไม่ save

วันนี้จะมี command ง้ายๆมาบอกต่อเกียวกับการลบ app ก็เหมือนเดิมครับ
เสียบสาย usb เข้าโทรสับ
เปิด adb แล้วพิม cmd ต่อไปนี้ได้เลยครับ

adb shell am start -a android.intent.action.DELETE -d package:

สร้างปุ่มกระจกใสกิ้ง(Photoshop) by

30
Apr
0

ถึงแม้วันนี้ Trend design user interface จะเป็นแบบ Flat แต่เราก็จะทำ How to ปุ่มแบบนี้อยู่ดี วะฮ่าๆๆๆ

1.สร้างสี่เหลี่ยมหน้าโง่ขึ้นมา 1 อัน แล้ว copy layer ออกมาเป็นสองอัน โดยด่วน

2.ปรับ blending option ของ layer บน (คลิกขวาที่ layer)

ไม่ต้องคิดไรมากปรับค่าตามภาพต่อไปนี้



จะได้ภาพออกมาเป็นแบบนี้ Layer นี้เราใช้ในการทำให้แสงเงาขอบต่างๆดูเป็นกระจกใสๆ นะจ้ะเด็กๆ

3.ปรับ blending option ของ layer ล่าง เพื่อใส่สีให้ปุ่ม

จะได้ปุ่มออกมาหน้าตาแบบนี้

4.ยังๆ แต่เรายังไม่พอแค่นี้ มันยังไม่ใสกิ้งๆ new layer ขึ้นมาอีกอันก่อน

สร้าง selection ที่ปุ่ม แล้วใช้ gradient tool สีขาว แบบ linear ลากสีซ้ายบน กับ ขวาล่างซะ

เท่านี้ก็เสร็จเรียบร้อย ถ้าอยากปรับสีก็ไปปรับที่ blending option ของ layer ซะ

จบจ้ะ

กู้เงิน | เศรษฐกิจพอเพียง | สินเชื่อบุคคล | สมัครบัตรกดเงินสด | สินเชื่อ | เงินกู้ด่วน | ยืมเงินทรูมูฟ | เงินด่วนนอกระบบ