ThaiGameDevX - Thai Game Developers eXchange Forums
21 November 2017, 10:15:05 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: หากมาครั้งแรก เชิญอ่าน ประกาศเจตนารมณ์ของ ThaiGameDevX และ กติกา ข้อตกลงในการใช้เว็บบอร์ด ครับ
 
   Home   Help Search Calendar Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: อยากทราบว่าเพื่อนๆใช้ GUI ตัวไหนกับ XNA อยู่ครับ (Update 15-09-2011) Inventory Control  (Read 4931 times)
0 Members and 1 Guest are viewing this topic.
centino
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +13/-0
Offline Offline

Posts: 65


« on: 14 August 2011, 12:36:31 AM »

เนื่องจากช่วงนี้มีเวลาว่างหน่อยๆ  เลยลอง Engine ไปเรื่อย

Unity ก็ลองแล้วแล้วก็รู้สึกว่างงๆควบคุม Code ไม่ได้ดั่งใจ  ( -*- เครื่องมือมันดีเกิน )
UDK ที่ใช้อยู่ ก็รู้สึกว่า ถ้าจะไปทำงานบริษัทก็ไม่มีคนสนใจจะจ้าง จะรวมทีมเองก็ยากอีก
 
เลยเปลี่ยนมาลองใช้ XNA ดู  ตอนแรกก็ไม่ได้สนใจ XNA เท่าไหร่
แต่พอได้จับๆ เริ่มศึกษาสักนิด .......  โอ้วววว  นี่มันสวรรคของ Programmer จริงๆ
แต่ว่า Tools เจ๋งๆ ไม่ค่อยมี ต้องพึ่งฝีมือและ Community เยอะๆหน่อย

ผมเลยเริ่มดูที่ระบบ GUI ก่อน เพราะเป็นส่วนที่ถนัดที่สุด
ผมก็ไปเซิจๆมา ก็เจอตัวนึงที่ดีๆเหมือนกันและเป็น Open Source ซะด้วย  http://neoforce.codeplex.com/
ซึ่งผู้พัฒนา ได้หยุดพัฒนาไปแล้วปีนึง  ลักษณะการโปรแกรมเป็น OOP  แต่ก็สงสัยว่าทำไมคนโหลดน้อยจริง หรือว่ามันใช้ยากไป
หรือมันไม่ค่อยมีลูกเล่นที่ใช้กับเกมส์ได้จริงๆ ( ดูแล้วมันเน้นความเป็น System Control มากไป )

เลยเอา GUI ตัวเดิมที่ใช้กับ Project ก่อนหน้านี้ (http://zicma.rc-part.com/neobbs/viewtopic.php?f=5&t=26)
มาแปลงเป็น Library ใช้กับ XNA ดู  ซึ่งตอนนี้ก็ยังไม่เกิดปัญหาอะไร  แต่แปลงจาก C++ มาเป็น C#  เล่นเอาเวียนหัวเหมือนกันในเรื่องของ
CHAR กับ String ซึ่งต้องใช้ StringBuilder เข้ามาช่วย

อันนี้เป็นส่วน GUI ที่เริ่มทำไปได้แล้วส่วนนึง
http://zicma.rc-part.com/source/zpgui_for_xna.jpg
ยังมี Control อีกหลายตัวที่ยังไม่ได้แปลงมา ( แค่เมื่อวานแก้ Textbox ก็นั่งทำไปทั้งวันแล้ว -*- ) แต่คาดว่าจะทำเรื่อยๆจนกว่าจะเสร็จ
และจะเพิ่มเติม Control ที่เหมาะกับเกมส์ในภายหลัง  เรียกได้ว่า เป็น Control ที่ช่วยในการออกแบบระบบเกมส์เลยก็ว่าได้
( แต่เรื่อง sprite animation จะเอาไว้หลังสุด )

อยากทราบว่า ถ้าจะปล่อย Library ให้ใช้จะมีคนสนใจเปล่าหว่า แต่จะไม่ Open Source นะครับ
ลักษณะการเขียนโปรแกรม ไม่ค่อยเป็น OO เท่าไหร่ ใช้ Class หลักควบคุม Object ทั้งหมด ( เนื่องจากตอนเขียนใน C++ จะเป็นกึ่ง Bottom UP )
การใช้งานจะคล้าย WINAPI เอามาทำ GUI
Code ในการควบคุม GUI Control จะเยอะ หลายบรรทัด ในการกำหนดคุณสมบัติ  แต่สามารถเข้าใจได้ง่าย

ตัวอย่าง Code ใช้งาน

Code:
            guiProgress.Control.DoProgressBar(progressA, (float)dFPSX, 9000, TYPE.COUNTTYPE.INCREASE);
            guiProgress.Control.DoProgressBar(progressB, (float)dFPS, 30000, TYPE.COUNTTYPE.DECREASE);
            guiProgress.Control.DoProgressBar(progressC, guiSliderBar.Control.GetData(ref Sd_hor3_SliderBar), Sd_hor3_SliderBar.fMaxValue, TYPE.COUNTTYPE.DECREASE);
            guiProgress.Control.SetData(ref labelprogressA, dFPSX, 3);
            guiProgress.Control.SetData(ref labelprogressB, dFPS, 3);
            guiProgress.Control.SetData(ref labelprogressC, guiSliderBar.Control.GetData(ref Sd_hor3_SliderBar), 3);

            guiObjBuff = guiProgress.Control.DoComboButton(combobuttonA, TYPE.COMBOBUTTONMODE.TOGGLEHEAD_CHILD_PRESS);
            if (guiObjBuff != null && !guiObjBuff.stSlot.bHeadControl)
                guiProgress.Control.SetCaption(TYPE.CAPTIONTYPE.MAIN, guiObjBuff.stSlot.stCAPTION.Main.sData, combobuttonB.stRangeID.iFirst);

            guiObjBuff = guiProgress.Control.DoComboButton(combobuttonB, TYPE.COMBOBUTTONMODE.TOGGLEHEAD_CHILD_RELEASE,true);
            if (guiObjBuff != null && !guiObjBuff.stSlot.bHeadControl)
            {
                guiProgress.Control.SetCaption(TYPE.CAPTIONTYPE.MAIN, guiObjBuff.stSlot.stCAPTION.Main.sData.Replace("Child", "").Trim(), combobuttonA.stRangeID.iFirst);
                guiProgress.Control.SetTextAlign(guiObjBuff.stSlot.eTextAlignType, combobuttonA.stRangeID.iFirst);
                guiProgress.Control.SetTextVAlign(guiObjBuff.stSlot.eTextVAlignType, combobuttonA.stRangeID.iFirst);
            }

หรือเพื่อนๆที่ทำเกมส์ด้วย XNA กันอยู่ใช้ GUI ฟรีตัวไหนหรือพัฒนาขึ้นมาเองกันบ้าง
เผื่อไม่มีใครสนใจจะได้ไปเขียนโปรแกรมส่วนอื่นๆต่อ - -
« Last Edit: 15 September 2011, 11:28:09 AM by centino » Logged

bayofxyz
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +2/-0
Offline Offline

Gender: Male
Posts: 51



« Reply #1 on: 14 August 2011, 11:46:01 AM »

ปกติผมใช้ Neoforce ครับ
ถ้าถามว่าสนใจอันนี้มั้ย ผมไม่ค่อยสนใจนะ
แต่ถ้าเกิดมี GUI ที่ใช้กับการทำเกมเลยเช่น Scale form - Inventory แบบที่คุณเคยทำ มันจะน่าสนใจขึ้นมาเลย :p
Logged

AUT
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +27/-0
Offline Offline

Posts: 92


WWW
« Reply #2 on: 14 August 2011, 07:49:48 PM »

ไม่ทราบว่าเรื่องฟอนต์ภาษาไทยมีปัญหาบ้างหรือเปล่าครับใน XNA เพราะผมใช้ ID3DXFONT ของ DirectX แล้ว
ลองใช้ฟอนต์อื่นที่ไม่ใช่ System เช่น Browallia New พอปรับขนาดตัวอักษรขนาดใหญ่และแสดงข้อความเป็นภาษาไทยมันทับซ้อนกันจนบังหายไป
คล้ายๆกับภาพนี้นะครับ

สังเกตที่หางของตัว d ในรูปนะครับ แต่ของไทยมันมีสระกับวรรณยุกต์อีก ยิ่งไปกันใหญ่เลยครับ ตอนนี้ยังแก้ไม่ได้เลย

« Last Edit: 14 August 2011, 07:51:36 PM by AUT » Logged

www.siamtip.com
DirectX9.0c for Delphi & VC++
centino
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +13/-0
Offline Offline

Posts: 65


« Reply #3 on: 14 August 2011, 09:56:34 PM »

ต้องใช้ Bitmap Font ครับ  ตอนนี้ผมยังไม่ได้จัดการเรื่องภาษา
เพราะ XNA เองมันไม่ Support Unicode

ต้องใช้ Bitmap Font มาช่วยแล้วเขียนโปรแกรมเพิ่มเพื่อให้มันพิมพ์ไทยได้
ซึ่งเมื่อใช้ Bitmap Font แล้ว เรื่องขนาดตัวอักษรก็ไม่ใช่ปัญหาใหญ่ละครับ
( มันไปใหญ่เรื่องอื่นแทน ฮ่า )



ส่วนเรื่องตัว GUI ที่ผมทำนั้นไม่ได้เป็น System GUI ทั่วๆไป แต่จะมี Control ที่ช่วยทำเกมส์เลย  เช่นที่มีตอนนี้คือ

- LIST IMAGE TIME   คือ เป็นลิตส์รูปภาพ ที่มีเวลา กำหนด ให้มันหายไปเองได้ เหมือนกับ Buff ในเกมส์
และตอนใกล้จะถึงเวลาที่กำหนดก็สามารถ กำหนดช่วงเวลาให้มันกระพริบได้ ความเร็วเท่าไหร่ และหายไปเอง
อะไรประมาณนี้ สามารถกำหนด Direction ได้ง่ายๆ ในแบบ X * Y
Code 4-5 บรรทัด ก็ทำงานได้ละ

- FREE STATIC SLOT  สำหรับจัดการเรื่อง Item เช่นทำ Inventory หรือ Shortcut
สามารถ Drag Drop  Data ได้ง่ายๆ กำหนดขนาดช่องแบบ X * Y ได้เลย
แต่ผมยังติดปัญหาเรื่องโครงสร้างข้อมูลภายในที่จะให้แลกเปลี่ยนได้ เพราะไม่ได้ทำเป็น Object เลยยังไม่ได้เปิดให้ใช้ทั่วไป

- REAL INFORMATION  เป็น Control ที่ทำให้แสดงข้อความ หรือรูปภาพ ในช่วงเวลาหนึ่ง หรือตลอดก็ได้
เพราะมี Parameter ให้ปรับได้เยอะ จากในวิดีโอก็เอามาทำเรื่อง Damage หรือ Sprite ข้อความที่แสดงขึ้นมาแล้ว Fade หายไปเองในช่วงเวลาที่กำหนด

ซึ่งในอนาคตเองถ้ามีเวลาก็อยากจะทำเพิ่มหลายๆตัว เช่น Mini Map Control , Animation Control , Minimize, พิมพ์ไทยได้
เอาเป็นว่าอะไรก็ได้ที่คิดว่าจะสามารถเป็นระบบเกมส์แบบย่อยๆได้เลยประมาณนั้น

ไม่ต้องมานั่งเขียน Code เองให้เมื่อย
ส่วน Control อื่นๆก็เป็น Control ทั่วๆไป
แต่ถ้าไม่มีใครสนใจก็ไม่เป็นไร เดี๋ยวจะเก็บไว้ใช้เองไม่ก็ทำเป็น portfolio ไว้ดูเล่น ฮ่าๆ
Logged

bayofxyz
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +2/-0
Offline Offline

Gender: Male
Posts: 51



« Reply #4 on: 15 August 2011, 12:09:53 PM »

น่าสนใจเลยครับ Smiley
Logged

centino
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +13/-0
Offline Offline

Posts: 65


« Reply #5 on: 16 August 2011, 03:32:01 AM »

เอาไว้เสร็จแล้วจะเอามาให้เทสละกันครับ

ว่าจะ Built-in ระบบ Inventory + Shortcut เข้าด้วยกันให้เลย ไม่รู้จะดีไหม
แล้วให้ User ไป Set พวก Position Area กับ Texture เอาเอง
เพราะถ้า Implement การทำงานส่วนนี้ค่อนข้างจะยุ่งยากพอสมควรจากการที่ได้ใช้งานจริงมาแล้ว
ไม่ใช่แค่GUIที่ผมทำหรอกนะ ขนาด Scaleform เองก็ไม่ง่ายเหมือนกัน Code 3-4000 บรรทัดไปละ
ทั้ง Actionscript และ Unrealscript
ยังไง Scaleform มันก็สะดวกแค่มี Control พื้นฐานมาให้แล้วก็ จัดรูปร่างหน้าตา GUI ได้ง่าย + ทำ Animation ได้
แต่ในส่วนของการทำระบบ GUI ขึ้นมาเพื่อรองรับเกมส์หนึ่งๆ ความยุ่งยากมันก็ขึ้นกับความต้องการของเรานั่นเอง
ที่ต้องจัดการโครงสร้างข้อมูลของระบบให้สามารถทำงานได้ดีที่สุด

ตอนนี้คิดอะไรดีๆได้หลายอย่างแต่ไม่รู้จะมีเวลาทำไหมฮ่าๆๆๆๆๆๆ
Logged

centino
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +13/-0
Offline Offline

Posts: 65


« Reply #6 on: 06 September 2011, 09:39:24 PM »

ตอนนี้เสร็จไปประมาณ 70% ละนะครับ เปลี่ยนเป็น OOP หมดละ
เจอสิ่งที่ Neoforce Control ยังเป็นข้อด้อยบางจุดเหมือนกัน
เช่น
-Multiple Font ไม่สามารถกำหนด Font  ให้แต่ละ Control ได้
-Hidden เฉพาะ Window ไม่ได้
-ขาด State ของ Caption
ฯลฯ
แต่ GUI ผมสามารถทำได้มากกว่า
ในส่วนที่เค้าทำระบบเอาไว้หลายๆจุดก็ดีอยู่แล้วสมกับเป็น system GUI
แต่ผมว่ามันยังน้อยเกินไปสำหรับทำ game GUI ที่ต้องการอะไรที่มากกว่านั้น
และบางจุดก็ไม่จำเป็น เช่นพวกการ resize window ด้วยเมาส์, Window Scrollbar (ใช้ Control Scrollbar ก็พอ)
สำหรับ game GUI แทบจะไม่จำเป็น ผมคาดว่าจะตัดออกในตัวที่กำลังจะทำ ( ตัวเก่าผมก็ทำเอาไว้ )
เสียดายที่เค้าหยุดทำไปแล้วปีนึง น่าจะมีคนมาซื้อตัวไปเลยไม่ว่างทำ

ช่วงนี้กำลังทำพวก Control พิเศษอยู่ ใครที่คิดว่าถ้าคนไทยทำแล้วมันจะไม่ค่อยได้เรื่อง
รอหน่อยละกันเดี๋ยวจะได้ลอง เพื่อจะช่วยทำให้สร้างเกมส์ได้ง่ายขึ้น

อ่อ GUI ของผม support ทั้ง non power of 2, และ power of 2 texture ด้วยนะ
แยกระหว่าง detect rect กับ render rect
จึงไม่จำเป็นต้องสร้าง Texture ที่มีขนาดของรูปภายใน เป็น power of 2 (แต่ขนาดของ texture เป็น power of 2) 
แต่สร้างรูปตามจริง และ ให้พื้นที่ๆที่เหลือจากขนาดของ power of 2  เป็น Alpha ทัั้งหมด
แล้วก็กำหนด detect rect เอาเอง เพื่อที่จะแยกระหว่างการ render กับ พิกัดในการ Action กับ Control
ข้อดีทำให้ทำ Texture ได้หลากหลายรูปแบบได้มากขึ้นด้วย เช่น ทำ Glow Button, หรือ Button+Background
ได้ใน Texture เดียวกันไปเลย
« Last Edit: 06 September 2011, 09:56:09 PM by centino » Logged

bayofxyz
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +2/-0
Offline Offline

Gender: Male
Posts: 51



« Reply #7 on: 07 September 2011, 12:31:38 AM »

เจ๋งครับ Smiley
Logged

centino
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +13/-0
Offline Offline

Posts: 65


« Reply #8 on: 10 September 2011, 06:02:14 AM »

อัพเดทครับ
Special Control ตัวนี้ชื่อว่า LifeObject Control ครับ

http://www.youtube.com/watch?v=1pfbRPnyKBM

รายละเอียด
เป็น Control ที่สร้าง GUI Object  ขึ้นมาในช่วงเวลาที่กำหนด
โดยสามารถกำหนด รูปแบบ การทำงานได้ 3 อย่างคือ
Move Scale และ Rotate  ซึ่งจะมี Pattern มาตรฐานอยู่ 13 แบบ ซึ่งเป็นการเคลื่อนที่ ย่อขยาย หมุน ในรูปแบบที่ต่างกัน
สลับขั้นตอนการทำงานกัน
รายละเอียดภาษาอังกฤษ ไปแปลเองนะครับ ผมขี้เกียจพิมพ์หลายรอบ

LifeObject Control Details.
- Support TEXT and TEXTURE + TEXT
- Each Object can Scale Move Rotate by 13 pattern and variable parameter value.
- Each Object can operate with Base Control Class.
- Easy Transfer Data from old Object to new Object.
- Low number line of code for implement this control.
- Each Object can contain User Define Data.
- Can implement to basic multiple Object animation or continues Object animation.

ตัวอย่างการใช้งาน
Control ตัวนี้ จะสามารถทำให้เกิด Animation เล็กๆได้ โดยที่เป้น Animation ที่มี Interact กับผู้ใช้
ตัวอย่าง
- ระบบไอเทม สำหรับเกมส์ 2D ไอเทมดรอปมาก็คลิ๊กที่ไอเทม แล้วไอเทมก็จะวิ่งไปที่ใดที่หนึ่ง
หรือลอยขึ้นมาแล้วเฟดหายไป หรือวิ่งเข้าหาผู้เล่น
- ข้อความต่างๆแจ้งเตือนผู้เล่นเกมส์ ทั้งเกมส์ 2D 3D โดยอาจจะทำให้ ลอยขึ้นมาแล้วเฟดหายไปช้าๆ หรือจะ
Implement ให้มีการเคลื่อนที่แบบ projectile ก็ได้ เพราะสามารถทำการย้าย Object มาอยู่ใน Manual List
- สำหรับเกมส์ 3D เองก็ได้ เช่นเวลาเกิดเหตุการณ์อะไรในเกมส์ก็ทำให้มี ICON แสดงที่ตัวผู้เล่น
แต่มี Animation เล็กๆด้วย แบบไม่ต้องใช้ Animation sprite ให้ผู้เล่นคลิ๊กเพื่อทำการ ติดต่อกับส่วนอื่นๆ
- นี่เลย เลข Damage  ผมว่าเป็นความคลาสสิคสำหรบเกมส์หลายๆเกมส์
ถ้าไม่ต้องการปรับแต่งอะไรมาก เขียน Code ไม่เกิน 5-10 บรรทัดก็สามารถใช้งานได้ทันที

ส่วน Control อื่นๆที่เห็นก็จะมี
Timer Icon เหมือนที่เห็นๆกันในระบบ Icon สกิล
Step Progress - 3 Scale เลข จะวิ่งขึ้นทีละน้อย ในช่วงเวลาที่กำหนด
Preogress 2 Scale
Group Control  นี่ก็สำคัญในการจัดการ Interface ที่ทำงานร่วมกับ Data ที่มีโครงสร้างใหญ่ๆ
เช่นระบบ achievement  หรือส่วนใดๆของเกมส์ที่ต้องการแสดงรายละเอียดแบบเป็น List ของกลุ่มข้อมูล
(ในตัวอย่างเป็นการ ทำ Group Control ของ Button TextBox กับ Progress แล้วทำการ Sunchronize กับ Timer Icon)
Listview
Slider
ComboButton
จริงๆมีอย่างอื่นอีก แต่มันเป็น  Basic Control เลยไม่อยากจะนำเสนอมาก
ตัวต่อไปว่าจะทำ Inventory กับ shortcut ละ

ปล. นิดนึง ผมยังไม่ได้จัดการเรือง Multi layer ถ้าเป็นว่ามันซ้อนกันแปลกๆ ไม่ต้องแปลกใจ
« Last Edit: 10 September 2011, 06:03:45 AM by centino » Logged

centino
Approved Member
Jr. Member
*

จำนวน ชม/ไม่พอใจ: +13/-0
Offline Offline

Posts: 65


« Reply #9 on: 15 September 2011, 11:30:59 AM »

Inventory Control.

http://www.youtube.com/watch?v=Mx-1KyxKm78

Inventory Control simple details.
- Standard of RPG inventory style with mouse drag - drop interface.
- Support multiple inventory with separate item usedlist.
- Multi-event driven implementation.
- Basic template data and item management system. ex use,remove,auto additem,swap,transfer.
- User can define data and implement by your self.
- Can transform to another system  ex - equipments , shop etc...

features in next develop.
- Scroll with smooth value.
- Support combination with equipment system and shop.
- Multiple dialog support.

ปล. เดี๋ยวแว๊บไปเล่น UDK ทำระบบ Quest ต่อสักเดือน ค่อยกลับมาทำ XNA ต่อ  ฮ่าๆ
Logged

Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2013, Simple Machines Valid XHTML 1.0! Valid CSS!