การเปลี่ยนโค้ดดิ้งจาก ActionScript มาเป็น C# by Ziah
Apr0
หลังจากที่ปัจจุบันเกมต่างๆได้ย้ายไปทำใน 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 KukGoo
Apr0
1. ลงสีพื้นของผม
2.กำหนดทิศทางแสง แล้วก็ปาดเงา
3.ปาดเงาชั้นที่ 2
4.ใช้สร้างเลเยอร์ใหม่แล้วตั้งเป็น Multiply แล้วปาดเพื่อเพิ่มน้ำหนักเงา
5.ใส่ Highlight ตรงพื้นที่ที่แสงกระทบ
6.ใส่แสงเพิ่มโดนสร้างเลเยอร์แล้วตั้งเป็น Overlay แล้วก็ปาดซะ
7.ตกแต่งให้เรียบร้อย
เสร็จแล้วเน้ออ~~ :v
mysqli by tosawat
Apr0
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 kisda
Apr0
ทำไมผมถึงพูดอย่างนี้ถูกไหมครับ เพราะเพื่อนหลายคนที่ใช้งาน android อยู่มักจะหา app lock หน้าจอมาใช้งานกันแต่ก็นั้นและครับ มันไม่ save
วันนี้จะมี command ง้ายๆมาบอกต่อเกียวกับการลบ app ก็เหมือนเดิมครับ
เสียบสาย usb เข้าโทรสับ
เปิด adb แล้วพิม cmd ต่อไปนี้ได้เลยครับ
adb shell am start -a android.intent.action.DELETE -d package: