 |
GUI and INVENTORY, Bạn xẽ thấy, khi một thằng noob thiết kế GUI thì sẽ n |
|
|
|
|
07-06-08, 10:10 AM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
GUI & INVENTORY Đây là màn hình chọn nhân vật của game Online Cửu Long Tranh Bá do Vinagame phát hành. Giao diện khi đã load song game. Đang chụp ngon, tự dưng thấy hai chú Montes lao vào oánh nhau  , 1 thằng là Thổ Long Trảo, 1 thằng hình như là đàn em của Nam Tử Vong cốc chủ, thằng Thổ Long Trảo vâm hơn---->thắng. Thế thì chả có gì đáng nói, vấn đề là con Thổ Long Trảo thịt thằng kia song, chắc đang máu sát sinh...thấy mình đứng gần lao ra cắn luôn Kết quả là 17  lượng mình dính xuất huyết đi tí máu  . Phần I.: Health Bar. Ta sẽ ngiên cứu cách làm cái Health Bar trước, cái gì dễ làm trước, khó làm sau, hẹn gặp lại anh em sau(mà ai biết làm cứ post lên thoải mái cho anh em xem, càng nhiều càng ít). Mà nói thẳng cho nó vuông, cái đống code của mọi người em đem về rồi(DemoD4) nhưng mà lắm quá nên không thể nhìn ra ngay được, có file đặc tả không cho em xin.(mà build nó lại còn báo không thấy model thầy cúng mới hài chứ, không thấy chỗ down Media đâu, mà thiếu cái gì là lỗi run-time luôn(VC++2008 Express)?. ------------------- Không biết phải đến VH mấy mới ngang được Cửu Long, mà thôi, chả cần biết, mình còn đầy thời gian, VH20-VH30 cũng được.

dCloud
|
|
|
|
|
|
|
|
07-06-08, 04:58 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
Main.cppCODE #include <irrlicht.h> #include "CHealthManaBar.h" using namespace irr; #pragma comment(lib, "Irrlicht.lib") int main() { IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D9, core::dimension2d<s32>(800,600)); if (device == 0) return 1; device->setWindowCaption(L"Noob'Bar"); video::IVideoDriver* driver = device->getVideoDriver(); CHealthManaBar Bar(driver); while(device->run() && driver) { if (device->isWindowActive()) { driver->beginScene(true, true, video::SColor(0,120,102,136)); Bar.draw(1,1,1,2); driver->endScene(); } } device->drop(); return 0; } CHealthManaBar.hCODE #include <irrlicht.h> using namespace irr; using namespace core; class CHealthManaBar { private: video::IVideoDriver* Driver; video::ITexture* imgHP; video::ITexture* imgMP; public: CHealthManaBar::CHealthManaBar(video::IVideoDriver* driver); CHealthManaBar::~CHealthManaBar(); void draw(int HP,int MaxHP,int MP, int MaxMP); }; CHealthManaBar::CHealthManaBar(video::IVideoDriver* driver) { Driver = driver; imgHP = Driver->getTexture("media/bar/HP.jpg"); imgMP = Driver->getTexture("media/bar/MP.jpg"); } CHealthManaBar::~CHealthManaBar() { } void CHealthManaBar::draw(int HP,int MaxHP,int MP, int MaxMP) { //Vẽ nền. Driver->draw2DRectangle(video::SColor(30,0,0,0), core::rect<s32>(8,8,157,32)); Driver->draw2DRectangle(video::SColor(30,0,0,0), core::rect<s32>(8,33,157,57)); //Vẽ Bar. Driver->draw2DImage(imgHP,position2d<s32>(11,11),core::rect<s32>(0,0,(143*HP)/MaxHP,18)); Driver->draw2DImage(imgMP,position2d<s32>(11,36),core::rect<s32>(0,0,(143*MP)/MaxMP,18)); } Anh em xem hộ em có sai chỗ nào không, có phải sửa gì không. ----------------------------- Lời khuyên chân thành của Nam Võ Đang, 1 người từng trải(tức hôm nay): -Nếu bạn không biết vẽ, thì tốt nhất là đừng có vẽ làm gì. -Nếu bạn vẫn muốn vẽ, thì tốt nhất đừng có dùng MS PAINT(Không phải bây giờ mới biết nó lởm, nhưng không thể ngờ nó lại có thể lởm đến thế). -Nếu bạn vẫn muốn dùng MS PAINT, thì tốt nhất là đừng có cố vẽ đẹp làm gì, tốn thời gian vô ích, thà vẽ qua loa còn hơn, xấu thì xấu hẳn, đẹp thì đẹp hẳn. -Nếu bạn không tin tôi, hãy xem bằng chứng.  Edit: Quên Post ảnh.
This post has been edited by NamVoDang: 07-06-08, 05:02 PM

dCloud
|
|
|
|
|
|
|
|
07-06-08, 05:10 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
Phần II. Map. Sau cái Health Bar thì chắc cái này là dễ nhất(chả biết có phải không), nhỡ mà làm không nổi thì có mà xấu hổ chết. Hẹn gặp lại anh em sau khi đã làm xong. --------------------------- Mà em làm cái này không phải để "khoe hàng" với FOS đâu mà đang muốn học hỏi thật đấy(cái này thì chắc anh em làm được rồi). Tại sao các anh em lại không giúp em?  , mọi người có thể gợi ý cho em về cái Map không?. phóng to, thu nhỏ, mở rộng, vị trí nhân vật, hướng nhìn nhân vật, hướng nhìn của camera V.v...

dCloud
|
|
|
|
|
|
|
|
07-06-08, 06:45 PM
|

Gold Member
Group: [M]Moderator
Posts: 1,403
Thanks: 52 *
Joined: 22-July 06
From: Singapore
Member No.: 130

|
QUOTE -Nếu bạn vẫn muốn vẽ, thì tốt nhất đừng có dùng MS PAINT(Không phải bây giờ mới biết nó lởm, nhưng không thể ngờ nó lại có thể lởm đến thế). Chương trình edit ảnh số 1 của mình. Photoshop load lâu, nhiều nút rối mắt. GIMP load có nhanh hơn nhưng vẫn nhiều nút, rối mắt. Có paint là hay nhất  . Load nhanh, đơn giản, dễ dùng. Chương trình text editor yêu thích: notepad , đang tạm thời thử nghiệm notepad++ Health bar này cách làm không tốt lắm Thứ nhất, nó nên được kế thừa từ IGUIElement. Nhưng cái này để sau, hiện thời làm được thế này là tốt rồi. Thứ hai, muốn đổi máu thì làm sao? Nên để hp là một field của class đó. Và tạo các method như setHP, getHP. Method draw() nên lấy 0 parameter. Thứ ba: media/bar/HP.jpg <-- là cái gì??? Nếu chỉ là hình chữ nhất thì có thể draw2DRectangle được mà. Tự vẽ rồi load làm gì cho khổ ra. QUOTE mọi người có thể gợi ý cho em về cái Map không Nó là cái ảnh 2D, chỉ được show một phần. Tham khảo draw2DImage để biết làm thế nào để draw một phần của ảnh. Cách tạo ra cái map thì còn tùy game nó làm sao. Không thể nói tổng quát được. Nếu map là terrain thì có thể lấy terrain texture ra làm map, sau đó đánh dấu vị trí cây cỏ, sông suối vào. Việc này được chuẩn bị trước chứ không làm realtime.

My name is Bull, for we are many ......
|
|
|
|
|
|
|
|
07-06-08, 07:13 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
QUOTE Thứ ba: media/bar/HP.jpg <-- là cái gì??? Nếu chỉ là hình chữ nhất thì có thể draw2DRectangle được mà. Tự vẽ rồi load làm gì cho khổ ra. Đích thị nó là hình chữ nhật, nhưng mà là hình chữ nhật bóng bẩy(mspaint đụng vụ này đi luôn), thành ra load cái HP.jpg xấu òm lấp chỗ  . QUOTE Thứ hai, muốn đổi máu thì làm sao? Nên để hp là một field của class đó. Và tạo các method như setHP, getHP. Method draw() nên lấy 0 parameter. Ô thế mỗi lần loop lại phải. SetHP(); SetMp(); Draw(); à? Draw() của em truyền thẳng thông tin của Character vào chứ(đối tượng này ko lo được vụ đầu vào). Mà thôi, PRO nói ăn chắc là đúng, như BILLGATE mà bảo dùng SQL server tốt hơn dùng FOXPRO for DOS thì chắc chắn là SQL hơn, thắc mắc làm gì, sau khắc hiểu. Thank anh nhiều nha.  Edit: quên ko hỏi. Transparent của Irrlicht có bị hâm ko mấy anh, sao em thấy nó kiểu gì ấy.
This post has been edited by NamVoDang: 07-06-08, 07:18 PM

dCloud
|
|
|
|
|
|
|
|
07-06-08, 08:11 PM
|

Gold Member
Group: [FOS]FreeOpenSource
Posts: 1,328
Thanks: 12 *
Joined: 19-August 06
From: Hà Nội
Member No.: 202

|
Cái đó có vẻ k hâm lắm vì trong demo tụi nó làm rất tốt Cái này vẽ = paint

~0_0~
|
|
|
|
|
|
|
|
07-06-08, 08:33 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
QUOTE Cái này vẽ = paint  Không còn gì để nói. @Bull: Cái ý kiến của anh về HP Bar để bao giờ làm 1.2 em sửa cả thể. ------------------------ GUI & INVENTORY lởm mà cũng có phiên bản....

dCloud
|
|
|
|
|
|
|
|
08-06-08, 11:37 AM
|

Event Supervisor
Group: [S]SMod
Posts: 1,977
Thanks: 42 *
Joined: 23-February 08
From: Tokyo, Japan
Member No.: 3,175

|
Xin chào em, code bằng laptop gì mà phê thế?? Minimap là cái đang cần em triển khai, anh sẽ nêu ý tưởng của anh, mời các em đóng góp ý kiến: Chúng ta sẽ có 1 thế giới 3D, thế giới này cứ giả sử là có số đô là dài 2 km, rộng 2km đi. Chúng ta cũng sẽ có 1 bản đồ của thế giới này, cứ giả sử là 1km ăn 10cm thì kích thước ảnh bản đồ là 20x20cm, cứ cho là chụp vào máy tính tạo ra ảnh có kích thước 500x500px đi. Minimap là một phần hiển thị trên màn hình, có diện tích là 150x150px đi. Như vậy nhiệm vụ của em là: 1. Xác định vị trí của nhân vật chính trong thế giới 3D, tọa độ này sẽ là một cái vector3df(a, b, c) nào đó 2. Tính ra vị trí tương ứng của người đó trong bản đồ nhỏ tọa độ này sẽ là một cái vector2df(e, f) nào đó 3. Nếu cho người đó đứng ở tâm của minimap, thì mình sẽ phải vẽ ra một phần của bản đồ 2D to, trong kỹ thuật đồ họa gọi là clipping, nếu em xem mô tả của hàm draw2Dimage, sẽ thấy đó là 1 core::rect<s32> Như vậy qua 3 bước, em sẽ vẽ được bản đồ nhỏ nơi nhân vật đang đứng. Kết hợp code của cái là bàn của mấy chú trên forum đã viết nữa, là em có minimap hoàn chỉnh. Cách tính: 1.Tọa độ trong 3D world chính là cái getAbsolutePostion() method của 1 node 2. Để tính được, thì hình dùng 3D world bỏ đi chiều cao, coi nó là 1 hình chữ nhật, xác định đầu kích thước của nó, và tính tỉ lệ, ví dụ: Hai đầu mút là A(xa, ya) và B(xb, yb), điểm C(xc, yc) là điểm nhân vật đang đứng A(xa, ya)-------------------------------- | | | | | | | | | | | | | + C(xc, yc) | | | ----------------------------------------B(xb, yb) Về lý thuyết, chỉ cần bỏ thành phần Y trong tọa độ đi là đc những thông số trên. Position của cái terrain - mình có ngay có dạng vector3df A(xa, ya,za) trong Irrrlicht thì thành phần Y là cao độ, bỏ nó đi là đc. Bỏ đi thực ra có thể thực hiện bằng 1 phép chiếu vuông góc, nhưng chỉ là mấy lời hoa mỹ. Bỏ đi, là xong. Từ kích thước terrain, tính ra tọa độ B C lấy từ getAbsolutePosition của node chứa cái mesh của nhân vật Vậy nên hai tỉ lệ t1 = xc / (xb-xa) và t2 = yc / (yb-ya) Phản ánh tỉ lệ tương đối của C trong 3D world. Nhân t1 với độ rộng của image của cái bản đồ và t2 với độ cao của cái bản đồ, ta được vị trí của nhân vật trong bản đồ 2D Ví dụ là D(xd, yd) Vì nhân vật ở giữa, nên sẽ có Đây là bản đồ 2D và vị trí nhân vật (D) và phần image phải lấy ra để vẽ lên minimap. ------------------------------------------ | | | | | | | | | -------- | | | D | | | -------- | ------------------------------------------ Vậy tọa độ hình chữ nhật phải tìm để đưa vào hàm draw2DImage là: úi, tự tính nhé  đoạn này anh phải đi ăn, bạn anh gọi

|
|
|
|
|
|
|
|
08-06-08, 11:55 AM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
Em ngĩ cái vụ xác định vị trí nhân vật trong môi trường 3D này không thuộc nhiệm vụ của em, lập trình hướng đối tượng thì việc ai người ấy lo chứ, đối tượng của em làm sao can thiệp vào game được. Nó chỉ có mỗi nhiệm vụ nhận thông tin, tính toán, và Draw(). ------------------- Em ngĩ thế thôi. Đối tượng của em xẽ nhận các parameter sau(dự tính). 1. video::IVideoDriver. 2. c8 *fileName chứa đường dẫn tới ảnh MiniMap. 2. kích thước thế giới. 3. vị trí nhân vật trên hệ tọa độ thế giới(bỏ trục cao). các method(dự tính). SetCharPos(x,y); x,y là vị trí nhân vật trên hệ trục tọa độ thế giới. Draw(); vẽ ra bản đồ nhỏ và 1 hình vuông biểu thị vị trí nhân vật đang đứng. Mỗi lần loop là lại SetCharPos(x,y); Draw(); Không biết ngĩ thế có ổn không, em xẽ làm phần này trước. Còn vụ Thu Phóng với lại mở rộng bản đồ, hiện các vị trí đang có quest, hiện NPC V.v...sẽ nâng cấp dần. Edit: QUOTE code bằng laptop gì Nó là cái Acer Aspire 4310 hình như 8tr.(của bố em, nhà chỉ có cái desktop). Intel Celeron M processor 530 1,73Ghz. screen 14.1"" Đồ họa GMA 950. 512 MB DDR2. 80 GB HDD.
This post has been edited by NamVoDang: 08-06-08, 12:10 PM

dCloud
|
|
|
|
|
|
|
|
08-06-08, 12:03 PM
|

Event Supervisor
Group: [S]SMod
Posts: 1,977
Thanks: 42 *
Joined: 23-February 08
From: Tokyo, Japan
Member No.: 3,175

|
QUOTE(NamVoDang @ 08-06-08, 11:55 AM)  Em ngĩ cái vụ xác định vị trí nhân vật trong môi trường 3D này không thuộc nhiệm vụ của em, lập trình hướng đối tượng thì việc ai người ấy lo chứ Vậy ai lo bây giờ em, Irrlicht chỉ là render engine, mình tự code từ a->z, nên mình phải tính. Nếu em thích OOP, thì method đó là method của cái MiniMap class. QUOTE(NamVoDang @ 08-06-08, 11:55 AM)  đối tượng của em làm sao can thiệp vào game được. Nó chỉ có mỗi nhiệm vụ nhận thông tin, tính toán, và Draw(). Đối tượng của em là một thuộc tính của game, nó cấu thành lên game, nó tác động trực tiếp vào game. Game cũng là 1 đối tượng luôn. QUOTE(NamVoDang @ 08-06-08, 11:55 AM)  Đối tượng của em xẽ nhận các parameter sau(dự tính).
1. video::IVideoDriver. 2. c8 *fileName chứa đường dẫn tới ảnh MiniMap. 2. kích thước thế giới. 3. vị trí nhân vật trên hệ tọa độ thế giới(bỏ trục cao).
các method(dự tính).
SetCharPos(x,y); x,y là vị trí nhân vật trên hệ trục tọa độ thế giới. Draw(); vẽ ra bản đồ nhỏ và 1 hình vuông biểu thị vị trí nhân vật đang đứng.
Mỗi lần loop là lại
SetCharPos(x,y); Draw(); Vì em chưa có kinh nghiệp OOAD, nên anh chân thành khuyên em cứ làm toàn bộ thủ tục trước, đầu tiên em nắm được làm thế nào, sau đó mới tính làm thế nào cho hay.

|
|
|
|
|
|
|
|
08-06-08, 12:46 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
QUOTE Đối tượng của em là một thuộc tính của game, nó cấu thành lên game, nó tác động trực tiếp vào game. Game cũng là 1 đối tượng luôn. Hix em diễn đạt không tốt lắm, ý em là không trực tiếp, nó không cần biết là thằng nào xẽ xài nó, nhân vật nào xẽ dùng nó. Nó chỉ cần biết là người dùng nó xài Irrlicht, đưa cho nó tọa độ của nhân vật(cái này em tưởng trong class của nhân vật có chứ), đưa cho nó cái ảnh, đưa cho nó độ lớn của thế giới, và thế là nó vẽ ra màn hình cái mini map. QUOTE Vậy ai lo bây giờ em Ơ em thấy chỉ cần có mấy dòng, VD: CMap Map(driver,10000,10000,"media/Map/Map1.jpg"); // 512 x 512. -loop Map.SetCharPosition(Char.X,Char.Z); Map.Draw(); Làm gì mà rắc rối lắm?, ngươi code chính lo được mà. Edit:Nhầm code.
This post has been edited by NamVoDang: 08-06-08, 01:02 PM

dCloud
|
|
|
|
|
|
|
|
08-06-08, 01:31 PM
|

Event Supervisor
Group: [S]SMod
Posts: 1,977
Thanks: 42 *
Joined: 23-February 08
From: Tokyo, Japan
Member No.: 3,175

|
Em nếu có 1 demo nhỏ thì cả team sẽ cùng tiến bộ nhanh hơn...

|
|
|
|
|
|
|
|
08-06-08, 05:21 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
Screenshort: Thử với bộ dữ liệu là Kích cỡ Terrain 10000,10000.(vị trí terrain trên trục thế giới phải = (0,y,0), y tùy chọn). Tọa độ nhân vật trên trục thế giới 5000,5000(giữa bản đồ). Map được dùng là Võ Đang Sơn của game CLTB.   Có vẻ ổn, nhưng mà khi thử đổi tọa độ nhân vật thành 0,0(góc trên bên trái) thì.  Cái gì thế này<------Tại nhân vật đứng quá gần mép bản đồ thành ra nó cắt sai. T.T . Main.cpp.CODE #include <irrlicht.h> #include "CMap.h" using namespace irr; #pragma comment(lib, "Irrlicht.lib") int main() { IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D9, core::dimension2d<s32>(800,600)); if (device == 0) return 1; device->setWindowCaption(L"Noob'Map"); video::IVideoDriver* driver = device->getVideoDriver();
//Tạo đối tượng Map từ class CMap. CMap Map(driver,10000,10000,"media/Map/Map.jpg"); while(device->run() && driver) { if (device->isWindowActive()) { driver->beginScene(true,true,video::SColor(0,120,102,136)); Map.SetCharacterPosition(0,0);//Cung cấp thông tin cho đối tượng Map về vị trí mới của nhân vật trên trục thế giới. Map.Draw();//Vẽ Map. driver->endScene(); } } device->drop(); return 0; } CMap.hCODE const int MapSizeX = 554;//Kích thước cái Map. const int MapSizeZ = 554; const int MiniMapSizeX = 200;//Kích thước cái miniMap(tức phần xẽ vẽ ra). const int MiniMapSizeZ = 200; #include <irrlicht.h> using namespace irr; class CMap { private: video::IVideoDriver* Driver;//Con trỏ tới driver. video::ITexture* imgMap;//Con trỏ tới Texture map. video::ITexture* imgPoint;//Con trỏ tới Texture tượng trưng cho nhân vật trên map.
core::position2d<s32> characterPosInWorld;//Vị trí của nhân vật trên hệ trục thế giới(bỏ Y). core::position2d<s32> characterPosInMap;//Vị trí của nhân vật(Hay đúng hơn là cái Point.jpg) trên Bản đồ. core::position2d<s32> characterPosInScreen;//Vị trí của nhân vật(Point.jpg) sẽ vẽ trên màn hình. core::rect<s32> miniMapRect;//Phần Map được vẽ.
int WorldSizeX,WorldSizeZ;//Kích cỡ của Terrains. void Calc(); //Tính characterPosInMiniMap,Vị trí vẽ nhân vật(point.jpg) trên phần map được vẽ.
public: CMap(video::IVideoDriver* driver,int worldSizeX,int worldSizeZ,c8 *fileName);//constructor. //worldSizeX & worldSizeX mình biết từ trước rồi em ngĩ tính nó lằng nhằng ra. //c8 *fileName đường dẫn tới File Texture của Map. ~CMap();//destructor. void Draw();//Vẽ Map và biểu tượng đại diện cho nhân vật. void SetCharacterPosition(int X,int Y);//Đặt lại thông tin vị trí nhân vật trên trục thế giới.(Khi loop phải gọi cái này trước rồi mới gọi draw). };
CMap::CMap(video::IVideoDriver* driver,int worldSizeX,int worldSizeZ,c8 *fileName) { Driver = driver; imgMap = Driver->getTexture(fileName);//Lấy Texture. imgPoint = Driver->getTexture("media/Map/Point.jpg");//Như trên. WorldSizeX = worldSizeX;//Kích thước ngang terrain. WorldSizeZ = worldSizeZ;//kích thước dọc terrain. }
CMap::~CMap() { }
void CMap::Draw() { Calc();//Tính toán vị trí mới trước khi vẽ. Driver->draw2DImage(imgMap,core::position2d<s32>(800 - MiniMapSizeX ,0),miniMapRect);//Vẽ Map, góc trên bên phải. Driver->draw2DImage(imgPoint,characterPosInScreen,core::rect<s32>(0,0,6,6));//Vẽ điểm biểu thị nhân vật. }
void CMap::SetCharacterPosition(int X,int Z)//Đặt lại thông tin về vị trí nhân vật trên trục thế giới. { characterPosInWorld.X = X; characterPosInWorld.Y = Z;//Lệch pha mới đau, thôi kệ. }
void CMap::Calc() { //Tính characterPosInMap từ characterPosInWorld, WorldSize và MapSize. characterPosInMap.X = (characterPosInWorld.X*MapSizeX) / WorldSizeX; characterPosInMap.Y = (characterPosInWorld.Y*MapSizeZ) / WorldSizeZ;//Y với Z cứ loạn cả lên thế này, thôi kệ sửa sau.
//Xác định phần Map sẽ vẽ lên màn hình. int X1,Y1,X2,Y2; X1 = characterPosInMap.X - MiniMapSizeX/2; Y1 = characterPosInMap.X - MiniMapSizeZ/2; X2 = X1 + MiniMapSizeX; Y2 = Y1 + MiniMapSizeZ; miniMapRect = core::rect<s32>(X1,Y1,X2,Y2);
//Xác định vị trí vẽ point.jpg(đại diện cho nhân vật). characterPosInScreen = core::position2d<s32>(800 - MiniMapSizeX/2,MiniMapSizeZ/2); } Anh em xem hộ xem có lỗi gì không, nếu không có lỗi thì đi giải quyết cái vấn đề cut map. Hướng giải quyết: Cách 1: Desgin map khéo, bịt sạch các biên lại, có gì teleport. Cách 2: Làm viền cho cái Map.jpg(cái này không thấy game nào áp dụng, và cũng xí òm). Cách 3: Lập trình để giải quyết vấn đề đụng góc.(cái này hơi bị phê) Em đã thử ngĩ rồi, nhưng chưa ra đành post lên đây để anh em ...giải quyết hộ...

dCloud
|
|
|
|
|
|
|
|
08-06-08, 05:41 PM
|

Event Supervisor
Group: [S]SMod
Posts: 1,977
Thanks: 42 *
Joined: 23-February 08
From: Tokyo, Japan
Member No.: 3,175

|
Có 2 điều cơ bản nữa anh gópý là: 1. Phải kế thừa thừ GUIElement nếu không thì cái map của em sẽ update per frame, và không hiển thị trênmàn hình trong game do thư tự render các thành phần khác nhau của game không đảm bảo cái map của em ở sau cùng 2. Khó khăn mới chỉ bắt đầu   3. Cool đấy, lớp 11 mà code như chú thì đất nước này có tương lai rồi
This post has been edited by doqkhanh: 08-06-08, 05:42 PM

|
|
|
|
|
|
|
|
08-06-08, 05:42 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
QUOTE Cách 2: Làm viền cho cái Map.jpg(cái này không thấy game nào áp dụng, và cũng xí òm). Tình hình là rút lại câu này. Cửu Long Nó Làm Viền rồi để viền Transparent. vì vậy các anh em artis làm map nhớ bao thêm 200 px nhá  Mà cái Demo walk by Mouse đâu rồi, cho em mượn test thử cái. --------------------- Mỗi ngày một kinh ngiệm: -Nếu bạn muốn code được tốt, hãy chọn một cái ghế vừa tầm với cái bàn, đừng cười vì có thể bạn xẽ mải quá mà quên mất vụ đấy(như tôi đây này T.T). ---------------------- Các chương trình hay dùng nhất của NVĐ. Soạn thảo: -NotePad 99%. -Word 1%. Vẽ: -MsPaint 100%(sự thật phũ phàng). Tính toán: -Calc 100%(không có gì phải phân vân). Danh sách xẽ được cập nhập sau. ---------This is my spam---------- Edit: Sai chính tả World - Word
This post has been edited by NamVoDang: 08-06-08, 06:08 PM

dCloud
|
|
|
|
|
|
|
|
08-06-08, 05:47 PM
|

Event Supervisor
Group: [S]SMod
Posts: 1,977
Thanks: 42 *
Joined: 23-February 08
From: Tokyo, Japan
Member No.: 3,175

|
anh ấy tranh thủ pr   Em nghĩ sao nếu giờ làm minimap tròn?

|
|
|
|
|
|
|
|
08-06-08, 05:55 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
Tình hình là dupe bài vì phải dupe(post không nhanh). QUOTE thứ tự render các thành phần khác nhau của game không đảm bảo cái map của em ở sau cùng Em định để nó ở cuối vòng lặp vì cái gì vẽ sau thì ở trên(hình như thế), mà cái Map thì đương nhiên nằm trên cùng nhưng vấn đề là anh bull cũng nhắc em vụ này rồi, nên em quyết định nâng cấp cái GUI&INVENTORY này lên phiên bản 1.2 sớm(mà chưa hoàn thành các thứ kia). Chương II : Width GUIElement. Phần 1: Health Bar.Hẹn gặp lại anh em. À mà cái GUIElement nó nằm trong tut nào vậy anh, hay là anh tut "sống" luôn cho em đi. Edit: Thêm Sign: -------------------- GUI lởm mà cũng có version.
This post has been edited by NamVoDang: 08-06-08, 06:06 PM

dCloud
|
|
|
|
|
|
|
|
08-06-08, 05:59 PM
|

Event Supervisor
Group: [S]SMod
Posts: 1,977
Thanks: 42 *
Joined: 23-February 08
From: Tokyo, Japan
Member No.: 3,175

|
Em xem thử code của ssge, có cái HUD.h là có dùng kế thừa gừ IGUIElement, mình kế thừa có mỗi phương thức tạo và hàm draw thôi mà

|
|
|
|
|
|
|
|
08-06-08, 06:03 PM
|
Phụng Vũ Cửu Thiên
Group: [M]Moderator
Posts: 1,741
Thanks: 64 *
Joined: 3-June 08
From: Far
Member No.: 3,610

|
QUOTE Em nghĩ sao nếu giờ làm minimap tròn? Hình tròn thì không có góc nhưng mà cứ làm dư ra mép 100 px là ok.(trên kia mình viết nhầm thành 200). --------------- Đời vẫn còn ngu. Edit: sao toàn Post bài lệch thế này?, tình hình lần sau đọc xong Delay 5 min rồi Post tiếp.
This post has been edited by NamVoDang: 08-06-08, 06:04 PM

dCloud
|
|
|
|
|
|
|
|
08-06-08, 06:13 PM
|

Silver Member
Group: Member
Joined: 1-July 07
From: Gaia
Member No.: 1,795

|
QUOTE(3D Model Group @ 07-06-08, 08:11 PM)  Cái đó có vẻ k hâm lắm vì trong demo tụi nó làm rất tốt Cái này vẽ = paint Cái này cũng vẽ bằng paint này P/S: Hic hic, xem mấy cái này mới biết bọn trẻ bây giờ giỏi quá. Mình giờ vẫn đang loay hoay mấy cái khỉ gió này. Cảm ơn mọi người rất nhiều. Bài viết này rất hữu ích
This post has been edited by TnTonly: 08-06-08, 06:36 PM

|
|
|
|
|
|
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:
Powered By IP.Board
© 2010 IPS, Inc.
Licensed to: GameDev.VN Group
Copyright © 2005-2010
GameDev.VN. All rights reserved Founded by GameDev.VN Group | Developed by GameDev.VN's members.
|
 |