การแก้ปัญหา ScrollBar ของ Flex โผล่เมื่อใช้ CustomScrollBar จาก Catalyst by Ziah

31
Jan
0
ScrollBar ของ Flex ที่โผล่มาซ้อนกับ CustomScrollBar

ScrollBar ของ Flex ที่โผล่มาซ้อนกับ CustomScrollBar

จากการที่ใช้ Flash Catalyst สร้าง CustomScrollBar เพื่อนำมาใส่ใน Flex ทำให้เกิดปัญหาเรื่อง ScrollBar ของ Flex โผล่มาซ้ำซ้อนกับ CustomScrollBar ของเรา แม้ว่าเลื่อนไปล่างสุดก็ยังมีไอเม็มที่ยังเลยจาก CustomScrollBar ของเราอีก

เลื่อน CustomScrollBar สุดแล้วยังเห็นไอเท็มไม่ครบ

เลื่อน CustomScrollBar สุดแล้วยังเห็นไอเท็มไม่ครบ

ซึ่งวิธีแก้ที่จะเสนอในวันนี้เป็นวิธีการแก้ใน ActionScript ดังนี้ครับ

scroll3

Group ตัวอย่างที่นำมาใชเแสดงผล โดยมี id คือ groupList และจากที่เห็น dataProvider ของ List เราคือ aColvList ซึ่งเป็น ArrayList ที่ถูกกำหนดไว้ใน ActionScript แล้ว

scroll2

จากโค้ดข้างต้นเป็น mxml tag ของ CustomScrollBar ของเราซึ่งกำหนด Viewport ไว้คือ Group ที่ครอบลิสท์ไอเท็มของเราที่จะใช้

scroll4

ทีนี้มาถึงสวนที่เราใช้แก้ปัญหา ScrollBar ของ Flex ไม่ให้แสดงขึ้นมาคือการเติมส่วนที่กำหนดขนาดความสูงของ Group ของเรา ให้มีขนาดเท่ากับส่วนสูงของ Item ของเรา คูณด้วยจำนวนแถว ซึ่งอธิบายโค้ดได้ดังนี้

if(aColvList.length%5) // 5 คือจำนวนของ Item ใน 1 แถวว่ามีกี่ตัว ซึ่งเราทำการเช็คว่าจำนวนไอเท็มของเราพอดีกับแถวหรือไม่หรือมีจำนวนที่เกินมา

colvList.height = (int(aColvList.length/5)+1)*160; //ถ้ามีเกินมาซึ่งก็คือแถวสุดท้ายมี 1-4 ตัว ก็ทำการนำจำนวนไอเท็มทั้งหมดหาร 5 แล้ว +1 ก็จะได้จำนวนแถว + แถวที่เกินมาแล้วคููณกับความสูงของไอเท็มหรือแถวๆหนึ่ง ซึ่งในที่นี้คือ 160

else

colvList.height = int(aColvList.length/5)*160; //ถ้าไม่มีเกินก็ทำการหารเอาจำนวนแถวคูณกับความสูงของแถวได้เลยครับ

ที่นี้เราก็จะได้  CustomScrollBar มาใช้อย่างไม่มีปัญหาแล้วล่ะครับ

CustomScrollBar เมิ่อแก้ไขสำเร็จแล้ว

CustomScrollBar เมิ่อแก้ไขสำเร็จแล้ว

การใช้งาน AS3isolib แบบพื้นฐาน (ตอนที่ 2) by Ziah

31
Dec
0

ต่อจากคราวก่อนที่เราได้รู้จักส่วนพื้นฐานของ As3isolib กันไปแล้ว ในตอนนี้เราจะอธิบายถึงการนำมาใช้จริง โดยปกติแล้วเราจะนำคอนเทนท์ต่างๆที่สร้างใน Adobe Flash มาใช้

ขั้นแรกให้เรารัน isoGrid เปล่าๆมาก่อน เพื่อจะได้ Capture รูปภาพ Grid ไปใช้ในการจัดคอนเทนท์ต่างๆที่เราจะนำมาใช้ หลังจาก Capture เสร็จให้เราเปิด Adobe Flash ขึ้นมาและ Paste รูปลงไป

iso2-8

ในส่วนแรกให้เรานำรูปที่จะใช้มาใส่เข้ามาแล้วจัดให้มีขนาดพอดีกับ Grid 1 ช่อง

iso2-1

แล้วก็จะมาถึงในส่วนสำคัญ คือเราต้องกำหนดจุด Registeration Point หรือ จุด Pivot ให้อยู่ในตำแหน่ง ที่อยู่สูงที่สุดของพื้นวัตถุนั้นๆ สังเกตุตามภาพ

iso2-3

เลื่อนวัตถุโดยให้จุด Registration Point อยู่ที่มุมบนของช่อง Grid

เลื่อนวัตถุโดยให้จุด Registration Point อยู่ที่มุมบนของช่อง Grid

จากนั้น Edit วัตถุโดยเลื่อนให้พื้นของวัตถุ มีจุดสูงสุดตรงกันกับจุด Registration Point

จากนั้น Edit วัตถุโดยเลื่อนให้พื้นของวัตถุ มีจุดสูงสุดตรงกันกับจุด Registration Point

จากนั้นเราก็ทำการตั้งชื่อวัตถุนั้นๆโดยการคลิ้กขวา Property และเลือก Export for Action Script เพื่อที่จะนำ swc ไปใช้ต่อ จากนั้นก็ทำการ Publish โดยเลือก Export SWC ด้วย แล้วนำ swc ที่ได้ไปไว้ใน Lib ของ Action Script Project ของเรา

iso2-5

และทำการเพิ่มโค้ดที่ทำใน ตอนที่ 1 ตรงส่วนที่หลังจากสร้าง isoScene แล้ว

var iso:IsoSprite = new IsoSprite(); //สร้าง isoSprite ซึ่งเป็นตัวแสดงผลวัตถุต่างๆ

iso.sprites = [brick]; //รับค่าเป็นอาเรย์ ใส่ชื่อของวัตถุนั้นลงไป

iso.moveBy(CELL_SIZE,CELL_SIZE, 0); //ขยับไปที่ช่องแรก

scene.addChild(iso); //ใส่เข้าใน scene

พอรันก็จะได้ผลลัพธ์ดังนี้

iso2-6

ถ้าเราเขียนลูปวนแสดงผลของวัตถุก็จะมีหน้าตาออกมาเช่นนี้ครับ

iso2-7

เท่านี้โลก iso ของเราก็เริ่มดูเป็นรูปเป็นร่างแล้วล่ะครับ

การใช้งาน AS3isolib แบบพื้นฐาน (ตอนที่ 1) by Ziah

30
Nov
0

As3isolib (ActionScript 3.0 Isometric Library) เป็นโอเพ็นซอร์ส ที่พัฒนาขึ้นเพื่อช่วยในการสร้างคอนเทนท์แบบ Isomatric (เช่นเกมและกราฟิก) สำหรับแพลตฟอร์ม Flash Player. As3isolib ประกอบด้วย utilities, primitives และ views. As3isolib ได้รับการพัฒนาให้มีความเรียบง่ายความเร็วและประสิทธิภาพในตัว เพื่อให้นักพัฒนาสามารถมุ่งเน้นไปที่การนำไปใช้จริงแทนที่จะต้องเรียนรู้ API ที่ซับซ้อน. สามารถหาข้อมูลเพิ่มเติมและดาวน์โหลดนำมาใช้งานได้ที่ http://code.google.com/p/as3isolib/

ในขั้นตอนแรกนี้จะแนะนำ 3 ตัว พื้นฐานที่จะนำมาใช้งานหลักๆก่อน คือ Grid Scene และ View พร้อมทั้ง Isobox ที่เป็นตัวทดลองการใช้งาน

  • Grid จะเป็นส่วนแสดงช่องของพื้นซึ่งเป็นพื้นของ iso
  • Scene จะเป็นส่วนของหน้าที่จะทำการประมวลผลก่อนจะแสดงผล
  • View เป็นส่วนแสดงผล
  • IsoBox เป็นคอมโพเนนท์พื้นฐานในการทดลองใช้ iso

package

{

//ทำการ Import ส่วนต่างๆเข้ามา

import as3isolib.display.IsoView;

import as3isolib.display.primitive.IsoBox;

import as3isolib.display.scene.IsoGrid;

import as3isolib.display.scene.IsoScene;

import as3isolib.geom.IsoMath;

import as3isolib.geom.Pt;

import eDpLib.events.ProxyEvent;

import flash.display.Sprite;

import flash.events.MouseEvent;

public class Iso extends Sprite

{

private static const CELL_SIZE:Number = 50; //ทำการตั้งขนาดช่องของ Grid

//สร้างตัวแปรทั้ง 4

private var grid:IsoGrid;

private var scene:IsoScene;

private var view:IsoView;

private var box:IsoBox;

public function Iso()

{

grid = new IsoGrid();

grid.setGridSize(10, 10, 1); //เซ็ทขนาดของ Grid โดยตามตัวอย่างให้มีขนาด 10×10 ช่อง

grid.showOrigin = true; //boolean ตั้งโชว์ลูกศรบอกทิศทาง

grid.cellSize = CELL_SIZE; //ตั้งค่าขนาดของช่อง Grid ให้เท่ากับค่าที่สร้างไว้

box = new IsoBox();

box.setSize(CELL_SIZE, CELL_SIZE, CELL_SIZE); //สร้างกล่อง isoBox ให้มีขนาด กว้าง x ยาว x สูง จากตัวอย่างให้ขนาดพอดีกบัช่อง Grid

box.moveTo(CELL_SIZE*2, CELL_SIZE*2, 0); //เป็นคำสั่งเคลื่อนย้ายเหมือนกับการเซ็ท x y z แต่ทำในมิติของ iso

scene = new IsoScene();

scene.addChild(grid);

scene.addChild(box);

scene.render(); //เป็นคำสั่งที่ทำให้ซีนทำการเปลี่ยนแปลงการแสดงผล *ต้องสั่งทุกครั้งถ้าต้องการให้การแสดงผลเปลี่ยนตาม*

view = new IsoView();

view.setSize(800, 600); //ตั้งขนาดของ view

view.centerOnPt(new Pt(200, 200, 0)); //ให้จออยู่ตรงตำแหน่งที่ตั้ง x y z

view.addScene(scene);

addChild(view);

}

}

}

ซึ่งจะทำให้ได้ผลลัพธ์ตามรูป

ผลลัพธ์จากการรัน

[Tips] เปิด Skype แล้ว Start Apache ไม่ได้? by Ziah

31
Oct
0
เปิด Skype แล้วทำให้ Start Apache ไม่ได้

เปิด Skype แล้วทำให้ Start Apache ไม่ได้

เปิด Skype แล้ว Start Apache ไม่ได้ เป็นปัญหาที่แก้ไขได้ง่ายแต่คนส่วนมากมักคาดไม่ถึง เมื่อเราทำการเปิดโปรแกรม Skype มาก่อนการ Start Apache จะทำให้ Apache ไม่ทำงาน เนื่องจาก Skype มีการใช้พอร์ทสำรอง ซึ่งก็คือ 80 และ 433 ซึ่งทำให้ไปชนกับพอร์ทของ Apache โดยวิธีการแก้ง่ายๆก็คือทำการ Start Apache ก่อนที่จะที่จะเปิด Skype และมีอีกวิธีการแก้อย่างถาวรคือไปปิดพอร์ทสำรองของ Skype ซะ ตามนี้ครับ

เข้า Skype ไปที่ Tools -> Options...

เข้า Skype ไปที่ Tools -> Options...

ไปที่แท็บ Advanced -> Connection จากนั้นก็ทำการติ๊ก "Use port 80 and 433 as alternatives for incoming connections" ออกซะครับ

ไปที่แท็บ Advanced -> Connection จากนั้นก็ทำการติ๊ก "Use port 80 and 433 as alternatives for incoming connections" ออกซะครับ

ใช้งานพร้อมกันได้แล้ว :)

ใช้งานพร้อมกันได้แล้ว :)

ปัญหา Java heap space Out of memory by Ziah

30
Sep
4

จากที่ได้ทำโปรเจ็คเกมที่ผ่านมา ด้วยตัวเกมนั้นมีขนาดใหญ่จำนวน ไฟล์จึงมีมากตามจึงทำให้เกิดปัญหา Java Heap Space: Out of memory ซึ่งจะทำให้โปรแกรมปิดตัวลง ซึ่งวิธีแก้จากการหาใน google จะมีวิธีช่วยได้บ้างตามนี้

1. Windows -> Preferences
2. Java -> Installed JREs
3. เลือก Adobe Flash Builder แล้วเลือก Edit..
4. เพิ่ม VM arguments -Xmx1024M (หรือตามใจผู้ใช้แต่คำพนึงถึงแรมเครื่องด้วย)

ซึ่งจากที่ลองทำแล้วปรากฎว่าการDebug ช้าลงเล็กน้อยและกินแรมมากขึ้นซึ่งอาจจะทำให้เกิดน้อยลง(หรือป่าว?)

ที่นี้บางคนอาจจะมีปัญหาเมื่อหลังจากมีปัญหาแล้วเปิดกลับมาอีกรอบ พอรันแล้วจะขึ้น Error Watcher ซึ่งจะขึ้นกับทุก File MXML ของเรา ซึ่งวิธีแก้ที่ผมใช้คือ แก้ไขและเซฟทีละไฟล์ครับ - -” (เคาะสเปซและลบ ทีละไฟลจนครบ) ซึ่งหลังจากนั้นก็จะกลับมาใช้ได้ปกติแล้วล่ะครับ