[Flex] วิธีการทำให้เกมของเราสามารถเปลี่ยนฟอนท์แบบตอน Run Time ได้ by Ziah
Feb0
โดยปกติแล้วในเกมจะใช้ฟอนท์หลักๆ 1 ฟอนท์ แต่ที่นี้ปัญหามันเกิดเมื่อเราทำ Localize ซึ่งฟอนท์ของเรานั้นไม่ได้ครอบคลุมตัวหนังสือของทุกภาษาจึงทำให้ต้องมีการเปลี่ยนฟอนท์ขณะรันไทม์ขึ้นครับ (เพราะต้องรอรับข้อมูลก่อนว่าผู้เล่นเลือกภาษาใดมา)
• ส่วนแรกโดนปกติแล้ว Flex เราจะเตรียม css มาไว้ให้ในไฟล์หลักอยู่แล้ว แต่ถ้ายังไม่มีก็สร้างขึ้นตามนี้ครับ
• จากนั้นก็ใส่ฟอนท์ที่จำเป็นตามปกติ แล้วตามด้วย css class ทิ้งไว้ดังนี้
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace s "library://ns.adobe.com/flex/spark";
@font-face
{
fontFamily: "2005_iannnnnCPU";
src: url("/assets/fonts/2005_iannnnnCPU.ttf");
embedAsCFF: true;
}
@font-face
{
fontFamily: "Tahoma";
fontWeight: bold;
src: url("/assets/fonts/tahomabd.ttf");
embedAsCFF: true;
}
@font-face
{
fontFamily: "Tahoma";
src: url("/assets/fonts/TAHOMA.TTF");
embedAsCFF: true;
}
@font-face
{
fontFamily: "Impact";
src: url("/assets/fonts/impact_0.ttf");
embedAsCFF: true;
}
@font-face
{
fontFamily: "AgencyGP";
src: url("/assets/fonts/dY_AgencyGP.ttf");
embedAsCFF: true;
}
@font-face
{
fontFamily: "-Layiji TaMaiTine1";
src: url("/assets/fonts/layiji_TarMineTine1.ttf");
embedAsCFF: true;
}
@font-face
{
fontFamily: "Arial";
src: url("/assets/fonts/arial.ttf");
embedAsCFF: true;
}
@font-face
{
fontFamily: "Arial";
fontWeight: bold;
src: url("/assets/fonts/arialbd.ttf");
embedAsCFF: true;
}
.langFontStyle{}
.fontSize12{}
.fontSize18{}
.fontSize20{}
.fontSize21{}
.fontSize22{}
.fontSize24{}
.fontSize25{}
.fontSize27{}
.fontSize28{}
.fontSize30{}
.fontSize31{}
.fontSize32{}
.fontSize33{}
.fontSize34{}
.fontSize35{}
.fontSize36{}
.fontSize38{}
.fontSize39{}
.fontSize40{}
.fontSize42{}
.fontSize44{}
.fontSize45{}
.fontSize46{}
.fontSize48{}
.fontSize49{}
.fontSize50{}
.fontSize52{}
.fontSize54{}
.fontSize56{}
.fontSize60{}
.fontSize64{}
.fontSize72{}
.fontSize100{}
.fontSize120{}
.fontSize128{}
ซึ่งที่เขียนเตรียมไว้เยอะๆเพราะเราจะต้องเขียนเผื่อขนาดฟอนท์ที่จะใช้ทั้งหมดในโปรเจ็คนั่นเอง (หรือจะมาเขียนเพิ่มเองทุกครั้งที่มีไซส์ใหม่ก็ได้)
• จากนั้นในไฟล์ Application หลัก โดยปกติจะมี <fx:Style source=”Main.css” /> แต่ถ้ายังไม่มีก็ให้ใส่ก่อน <fx:Script> ครับ
• ทีนี้ก็มาถึงส่วนตั้งค่าละ
if(lang=="en"||lang=="th"){ //ถ้าเป็นภาษาอังกฤษหรือไทย
styleManager.getStyleDeclaration(".langFontStyle").setStyle("fontFamily","2005_iannnnnCPU"); //ใช้ฟอนท์นี้
for(i=0;i<200;i++){
if(styleManager.getStyleDeclaration(".fontSize"+i)!=null)
styleManager.getStyleDeclaration(".fontSize"+i).setStyle("fontSize",i); //รันแก้คลาสชื่อนี้ทั้งหมดให้เป็นขนาดที่ใส่เลขไว้
}
}
else{ //ถ้าเป็นภาษาอื่นๆใช้ฟอนท์นี้และเซ็ทค่าต่างๆ
styleManager.getStyleDeclaration(".langFontStyle").setStyle("fontFamily","Arial");
styleManager.getStyleDeclaration(".langFontStyle").setStyle("fontWeight","bold");
for(i=0;i<200;i++){
if(styleManager.getStyleDeclaration(".fontSize"+i)!=null)
styleManager.getStyleDeclaration(".fontSize"+i).setStyle("fontSize",i/2);
}
}
• จากนั้นในแท็กต่างๆของเราที่ปกติใช้ property fontFamily=”xxx” fontSize=”yyy” ก็มาใช้เป็น styleName=”langFontStyle fontSize44″ เท่านี้แหละครับ
รวมคำสั่ง ADB (Android Debug Bridge) by heha
Feb1
ADB (Android Debug Bridge) ก็คือเครื่องมือ comand line tools ตัวหนึ่งเอาไว้สั่งการจาก PC ไปยังมือถือที่ต้องการผ่านสาย USB (หรือ wifi ผ่านบทความนี้) สามารถเรียกใช้งานได้ผ่าน path
sdkpath/platform-tools/adb
โดย sdkpath คือ path ที่เราลง android sdk ไว้ สรุปคำสั่งที่ใช้บ่อยๆ มีดังนี้
- adb devices – เป็นคำสั่งแรกที่ต้องใช้หลังนำมือถือเสียบ computer เป็นครั้งแรก เพื่อเช็คว่า PC เห็นมือถือเครื่องนี้หรือยัง หากปรากฏชื่ device มาก็แสดงว่าเริ่มต้นใช้งานได้ หากยังไม่ปรากฏ ต้องอนุญาตให้ PC เครื่องนี้สั่งการมือถือเครื่องนี้ได้ก่อนด้วยการ Enable Debug mode ผ่าน USB ที่ตัวเครื่องมือถือ แล้วเสียบ PC และติ๊กอนุญาตให้ PC สั่งมือถือเครื่องนี้ได้ (ป้องกันใครไม่รู้มาเอามือถือเราไปสั่ง adb ลบโปรแกรมทิ้งเล่น)
- adb logcat -s Unity – ใช้ดู log ที่พ่นผ่าน app ที่สร้างจาก Unity ทั้งหมด
- adb install path/to/apk – ใช้ install apk ลงเครื่อง
- adb install -r path/to/apk – ใช้ Install apk เหมือนเมื่อกี้ แต่ต่างจากเดิมคือถ้ามี app นั้นๆ อยู่แล้วในเครื่องจะลงทับให้อัตโนมัติ ไม่ต้อง uninstall ก็ได้
- adb install -d path/to/apk – เหมือนอันบน แต่อนุญาติให้ install apk ที่เลขเวอร์ชั่นต่ำกว่าเดิมทับ app เดิมที่อาจจะใหม่กว่าได้
- adb uninstall com.packagename.myapp – uninstall โดยกำหนดชื่อ package ที่ต้องการ com.packagename.myapp ซึ่งบางครั้งการ uninstall ที่ตัวเครื่อง android เองจะยังไม่ลบ app ไปจริงๆ ก็ต้องใช้คำสั่งนี้ช่วย
- adb clear com.packagename.myapp – clear ข้อมูลของ app ที่ระบุทั้งหมด (ให้ผลเหมือนการกด clear cache/clear data ผ่าน app manager ในมือถือ)
- adb push path/in/pc path/in/android-device – ใช้ copy ไฟล์จากเครื่อง PC ลงมือถือผ่าน command line
- adb pull path/in/android-device /path/in/pc – ใช้ copy ไฟล์จากมือถือมาลง PC ผ่าน command line
- adb shell screenrecord /path/in/android-device/demo.mp4 – ใช้อัดหน้าจอมือถือลงเครื่องเพื่อทำ screencast ได้อย่างสะดวก (ใช้ได้เฉพาะ android 4.4 ขึ้นไปเท่านั้น)
เคลีย Grid อัตโนมัติ ก่อนหรือหลัง Grid ถูก Enable หรือ Disable by tosawat
Feb0
บางครั้งเราก็จำเป็นที่จะต้อง ล้าง Grid ใหม่ทุกครั้งที่ Show หน้าที่มี Grid นี้ หรือ ล้างทุกครั้งที่เราละจาก Grid นี้ไป ไม่ว่าจะเหตุผลเรื่องของ Memory หรืออื่นๆก็ตาม วันนี้เรามีวีธีง่ายๆที่จะทำให้ชีวิตดีขึ้นมากก มาฝากครั้บบ
1. เราต้องแก้ไขไฟล์ UIGrid ของ NGUI ก่อนครับให้เราเพิ่ม code นี้ไปใน UIGrid ครับ
public bool clearGridOnEnable = false;
public bool clearGridOnDisable = false;
void OnEnable() {
if (clearGridOnEnable)
{
for (int i = 0; i < grid.transform.childCount; i++) {
Destroy (grid.transform.GetChild (i).gameObject);
}
if (detachChildren) {
grid.transform.DetachChildren ();
}
Resources.UnloadUnusedAssets ();
System.GC.Collect ();
}
}
void OnDisable() {
if (clearGridOnDisable)
{
for (int i = 0; i < transform.childCount; i++) {
Destroy (transform.GetChild (i).gameObject);
}
if (detachChildren) {
transform.DetachChildren ();
}
Resources.UnloadUnusedAssets ();
System.GC.Collect ();
}
}
2. ถ้าทำแค่นี้ ก็ยังไม่ทำให้ชีวิตเราง่ายขึ้นเท่าไหร่ครับ เพราะว่ามันจะไม่มี clearGridOnEnable หรือ clearGridOnDisable ขึ้นมาใน Inspector ให้เราตั้งค่าครับ ก็ให้เราเพิ่ม code นี้ในไฟล์ UIGridEditor ครับ
NGUIEditorTools.DrawProperty("Clear on Enable", serializedObject, "clearGridOnEnable");
NGUIEditorTools.DrawProperty("Clear on Disable", serializedObject, "clearGridOnDisable");
ให้เราเพิ่ม code ไปก่อนบรรทัดนี้นะครับ
serializedObject.ApplyModifiedProperties();
3. ต่อไปจากนี้ เราก็จะมี การตั้งค่าใน Inspector เพิ่มมาให้เราตั้งค่าครับ หน้าตาแบบนี้ครับ
หากเราต้องการให้ Grid ล้างค่า ของ ใน Grid ทุกครั้งเราก็แค่ ติ๊กถูกใน Inspector เท่านั้นเองครับ
ทำภาพเซนเซอร์ง่ายๆด้วย PS by Tae Romphopark
Feb0
เอาเทคนิตง่ายๆมาทำให้ดู เชื่อว่าหลายๆคนอาจจะไม่รู้นะ กับการทำภาพเซนเซอร์ มาลองดูกันครับง่ายมาก ^^
เริ่มแรกหารูปที่ถูกใจรูปไหนก็ได้ แฮ้กๆ
จากนั้นเลือก Selection ในจุดที่ต้องการ(A) ในที่นี้ผมเลิอกใช้ Marquee แบบวงกลม(B)
จากนั้นกดไปที่ Filter > Pixelate > Mosaic
จะมีหน้าต่างของ Mosaic ขึ้นมา ให้ไปปรับที่ค่า Cell Size ต่อเลย (ตรงนี้ขึ้นอยุ่กับความพอใจ ยิ่งค่ามาก Pixel ในภาพจะยิ่งขยาย)
กด OK ก็จะได้ตามภาพนี้
ลองเอาไปใช้ขำๆนะครับ หวังว่าจะมีประโยชน์นะ^^
การตั้ง keyboard shotcut ใน photoshop by Tua Poonsurapun
Feb0
ในการใช้งาน photoshop เราสามารถเลือกตั้ง keyboard shotcut ในคำสั่งที่เราใช้งานบ่อยๆได้ตามใจชอบ ซึ่งจะช่วยเพิ่มความสะดวกและรวดเร็วในการทำงาน
กดเลือกที่ edit > keyboard shotcut
จะขึ้นหน้าต่างเซ็ตติ้งตามแบบในรูป
กดที่ลูกศรด้านหน้า จะมีรายชื่อคำสั่งเปิดออกมา เราสามารถเลือกตั้ง keyboard shotcut ได้ตามใจชอบ โดยจะมีการเตือนหากซ้ำซ้อนกับคำสั่งอื่น