ÒÑÍê³É¿ØÖÆÃæ°å´î½¨ºó£¬ÖÆ×÷ÐèÏò “½»»¥Â䵨 - ×ÊÔ´ÕûºÏ - Âß¼±Õ»·” ÍÆ½ø£¬ÒÔϲ½Öè¾Û½¹¿ØÖÆÃæ°åÓëÓÎÏ·ºËÐÄÄ£¿éµÄÏνÓʵÏÖ£º
Ò»¡¢ÒýÇæºËÐÄÄ£¿é¶Ô½Ó
Ö¸Áî°ó¶¨ÓëÒýÇæµ÷ÓÃ
´ò¿ªËùÑ¡ÒýÇæ£¨Èç GOM¡¢HERO£©µÄ¿Í»§¶Ë SDK£¬½«¿ØÖÆÃæ°å°´¼üʼþÓëÒýÇæ API °ó¶¨¡£ÀýÈ磺½« “ÒÆ¶¯” °´¼ü°ó¶¨PlayerMove()º¯Êý£¬“¼¼ÄÜÊÍ·Å” °´¼ü¹ØÁªSkillCast(int skillId)½Ó¿Ú£¬È·±£°´¼ü´¥·¢Ê±ÒýÇæÄܽÓÊÕÃ÷È·Ö¸Áî¡£
×¢Ò⣺´«ÆæÒýÇæ¶à²ÉÓà C++ ±àд£¬ÐèÓöÔÓ¦ÓïÑÔ±àдÊÊÅä²ã´úÂ룬±ÜÃâ¿ØÖÆÃæ°å²Ù×÷ÓëÒýÇæÏìÓ¦Íѽڡ£
״̬ͬ²½Í¨µÀ´î½¨
ÔÚÒýÇæÅäÖÃÎļþÖÐÆôÓà “UI ״̬»Øµ÷” ¹¦ÄÜ£¬ÈýÇÉ«ÊôÐÔ£¨ÑªÁ¿¡¢µÈ¼¶£©¡¢³¡¾°ÐÅÏ¢£¨µØÍ¼Ãû³Æ¡¢¹ÖÎïÊýÁ¿£©ÊµÊ±»Ø´«ÖÁ¿ØÖÆÃæ°å¡£ÒÔ½ÇɫѪÁ¿ÎªÀý£¬Í¨¹ýOnHpChange(int currentHp)º¯Êý½«Êý¾ÝÍÆËÍÖÁÃæ°åÏÔÊ¾ÇøÓò£¬ÑÓ³Ù¿ØÖÆÔÚ 100 ºÁÃëÄÚ¡£
¶þ¡¢ÓÎÏ·×ÊÔ´±ê×¼»¯µ¼Èë
×ÊÔ´¸ñʽͳһ´¦Àí
½«µØÍ¼Îļþ£¨.map£©¡¢½ÇɫģÐÍ£¨.ani£©¡¢µÀ¾ßͼ±ê£¨.bmp£©×ª»»ÎªÒýÇæ¼æÈݸñʽ£ºµØÍ¼²ð·ÖΪ 128x128 ÏñËØÇø¿é£¬½ÇÉ«¶¯»Ñ¹ËõÖÁÿ֡ 24 λɫÉUI ËØ²ÄͳһΪ PNG ¸ñʽ²¢°´ “Ãæ°åÄ£¿é” ·ÖÀà´æ·Å£¨Èç “±³°ü”“¼¼ÄÜ” Îļþ¼Ð£©¡£
¹Ø¼ü²Ù×÷£ºÓøñʽת»»Æ÷ÅúÁ¿´¦Àí×ÊÔ´£¬È·±£ÎļþÃû´óСдÓëÒýÇæÅäÖÃÎļþ£¨Èç MapInfo.txt£©ÍêȫһÖ¡£
×ÊÔ´Ë÷Òý±í½¨Á¢
±àд XML Ë÷ÒýÎļþ£¬¼Ç¼×ÊԴ·¾¶ÓëÃæ°åµ÷ÓùØÁª¡£ÀýÈ磺¿ØÖÆÃæ°å “±³°ü” °´Å¥µã»÷ʱ£¬Í¨¹ýË÷Òý±í¶¨Î»/Resource/UI/Bag.png·¾¶¼ÓÔØÍ¼±ê£¬Í¬Ê±¹ØÁªµÀ¾ßÊý¾ÝÎļþ£¨ItemData.dat£©¡£
Èý¡¢ºËÐÄϵͳ¿ª·¢ÓëÃæ°åÊÊÅä
½ÇɫϵͳÂ䵨
ÔÚ·þÎñÆ÷¶Ë±àд½ÇÉ«ÊôÐÔ¼ÆËãÂß¼£¨µÈ¼¶¡¢¹¥»÷¡¢·ÀÓù£©£¬Í¨¹ý TCP ÐÒ齫Êý¾Ýͬ²½ÖÁ¿Í»§¶Ë¿ØÖÆÃæ°å¡£¿ØÖÆÃæ°å “½ÇÉ«Ãæ°å” ÐèʵÏÖ£ºÊäÈëGetPlayerAttr(int playerId)Ö¸ÁîÀÈ¡Êý¾Ý£¬²¢Óñí¸ñ×é¼þ¶¯Ì¬äÖȾÊôÐÔÁÐ±í£¬Ö§³Öµã»÷ “×°±¸” °´Å¥´¥·¢×°±¸½çÃæµ¯´°¡£
Õ½¶·ÏµÍ³ÏνÓ
Ϊ¿ØÖÆÃæ°å “¹¥»÷”“¼¼ÄÜ” °´¼üÌí¼ÓÂß¼Åжϣºµã»÷ʱÏÈͨ¹ý UDP ÐÒé·¢ËͲÙ×÷Ö¸ÁîÖÁ·þÎñÆ÷£¬·þÎñÆ÷·µ»Ø “¼¼ÄÜÊͷųɹ¦” ºó£¬¿ØÖÆÃæ°å´¥·¢ÌØÐ§²¥·Å£¨Èç¼¼ÄÜͼ±êÉÁ˸£©¡£Í¬Ê±ÔÚÃæ°åÌí¼ÓÕ½¶·ÈÕÖ¾ÇøÓò£¬ÊµÊ±ÏÔʾ “¹¥»÷Ôì³É XX É˺¦” µÈÐÅÏ¢¡£
ÈÎÎñϵͳǶÈë
ÔÚ¿ØÖÆÃæ°åÐÂÔö “ÈÎÎñ” ±êǩҳ£¬Í¨¹ýGetTaskList(int playerId)½Ó¿ÚÀÈ¡ÈÎÎñÊý¾Ý£¬°´ “Ö÷Ïß / Ö§Ïß” ·ÖÀàչʾ¡£µã»÷ÈÎÎñÌõĿʱ£¬µ÷ÓõØÍ¼ÒýÇæShowTaskNav(int mapId, int posX, int posY)º¯Êý£¬ÔÚÃæ°åСµØÍ¼ÏÔʾµ¼º½±êµã¡£
ËÄ¡¢ÍøÂçͨÐÅÐÒéʵÏÖ
ÐÒéÀàÐÍÆ¥Åä
¿ØÖÆÃæ°åʵʱ²Ù×÷£¨Òƶ¯¡¢¹¥»÷£©²ÉÓà UDP ÐÒé´«Ê䣬ȷ±£µÍÑÓ³Ù£»·Çʵʱ²Ù×÷£¨±³°üÎïÆ·´æ´¢¡¢ÈÎÎñÌá½»£©²ÉÓà TCP ÐÒé±£ÕÏÊý¾ÝÍêÕû¡£ÀýÈç£ºÒÆ¶¯Ö¸Áî·âװΪ[²Ù×÷Âë:0x01, ·½Ïò:1, ËÙ¶È:3]¸ñʽµÄ UDP Êý¾Ý°ü·¢ËÍ¡£
Êý¾Ý°ü¼ÓÃÜÓë½âÎö
ʵÏÖ»ù´¡¼ÓÃÜÂß¼£º¶Ô¿ØÖÆÃæ°å·¢Ë͵ÄÊý¾Ý°üÌí¼Ó¹þϣУÑé룬·þÎñÆ÷½ÓÊÕºóÑé֤УÑéλ£¬Í¨¹ýÔò½âÎöÖ¸Áî²¢Ö´ÐС£½âÎöʾÀý£º½«0x02 0x05 0x03£¨¼¼ÄÜÊÍ·ÅÖ¸Áת»»ÎªSkillCast(5, 3)º¯Êýµ÷Óá£
Îå¡¢²âÊÔÓëÎÊÌâÅŲé
¹¦ÄÜÏìÓ¦²âÊÔ
ÖðÏîÑéÖ¤¿ØÖÆÃæ°å²Ù×÷£ºµã»÷ “ÒÆ¶¯” °´¼ü¹Û²ì½ÇÉ«ÊÇ·ñͬ²½Î»ÒÆ£¬´ò¿ª “±³°ü” ¼ì²éµÀ¾ßͼ±êÊÇ·ñ¼ÓÔØÍêÕû£¬Êͷż¼ÄÜÈ·ÈÏÌØÐ§ÓëÉ˺¦ÊýÖµÊÇ·ñÆ¥Åä¡£Èô³öÏÖÑÓ³Ù£¬¼ì²é UDP ÐÒéµÄÊý¾Ý°ü·¢ËÍÆµÂÊ£¨½¨ÒéÿÃë 10 ´Î£©¡£
×ÊÔ´ÓëÊý¾Ýµ÷ÊÔ
ÓÃÒýÇæ×Ô´øµÄÈÕÖ¾¹¤¾ß²é¿´´íÎóÐÅÏ¢£ºÈôÃæ°åÏÔʾ¿Õ°×£¬ÅŲé×ÊÔ´Ë÷Òý±í·¾¶ÊÇ·ñ´íÎó£»ÈôÊý¾Ý²»Í¬²½£¬¼ì²é·þÎñÆ÷Óë¿Í»§¶ËµÄÐÒé×Ö¶ÎÊÇ·ñÒ»Ö¡£¿Éͨ¹ý×¥°ü¹¤¾ß²é¿´Êý¾Ý°ü½á¹¹£¬¶¨Î»½âÎöÎÊÌâ¡£
¹Ø¼üÏνÓÒªµã
¿ØÖÆÃæ°åÓëÒýÇæµÄ½»»¥Ð轨Á¢Í³Ò»Ê¼þÃüÃû¹æ·¶£¨Èç “Btn_¼¼ÄÜ_1” ¶ÔÓ¦µÚÒ»¸ö¼¼Äܰ´¼ü£©£¬±ÜÃâºóÆÚά»¤»ìÂÒ¡£
×ÊÔ´¼ÓÔØ²ÉÓà “°´Ðè¼ÓÔØ” ģʽ£º´ò¿ª¿ØÖÆÃæ°åijģ¿éʱÔÙ¼ÓÔØ¶ÔÓ¦×ÊÔ´£¬¼õÉÙ³õʼ¼ÓÔØÑ¹Á¦¡£
Ò»¡¢ÒýÇæºËÐÄÄ£¿é¶Ô½Ó
Ö¸Áî°ó¶¨ÓëÒýÇæµ÷ÓÃ
´ò¿ªËùÑ¡ÒýÇæ£¨Èç GOM¡¢HERO£©µÄ¿Í»§¶Ë SDK£¬½«¿ØÖÆÃæ°å°´¼üʼþÓëÒýÇæ API °ó¶¨¡£ÀýÈ磺½« “ÒÆ¶¯” °´¼ü°ó¶¨PlayerMove()º¯Êý£¬“¼¼ÄÜÊÍ·Å” °´¼ü¹ØÁªSkillCast(int skillId)½Ó¿Ú£¬È·±£°´¼ü´¥·¢Ê±ÒýÇæÄܽÓÊÕÃ÷È·Ö¸Áî¡£
×¢Ò⣺´«ÆæÒýÇæ¶à²ÉÓà C++ ±àд£¬ÐèÓöÔÓ¦ÓïÑÔ±àдÊÊÅä²ã´úÂ룬±ÜÃâ¿ØÖÆÃæ°å²Ù×÷ÓëÒýÇæÏìÓ¦Íѽڡ£
״̬ͬ²½Í¨µÀ´î½¨
ÔÚÒýÇæÅäÖÃÎļþÖÐÆôÓà “UI ״̬»Øµ÷” ¹¦ÄÜ£¬ÈýÇÉ«ÊôÐÔ£¨ÑªÁ¿¡¢µÈ¼¶£©¡¢³¡¾°ÐÅÏ¢£¨µØÍ¼Ãû³Æ¡¢¹ÖÎïÊýÁ¿£©ÊµÊ±»Ø´«ÖÁ¿ØÖÆÃæ°å¡£ÒÔ½ÇɫѪÁ¿ÎªÀý£¬Í¨¹ýOnHpChange(int currentHp)º¯Êý½«Êý¾ÝÍÆËÍÖÁÃæ°åÏÔÊ¾ÇøÓò£¬ÑÓ³Ù¿ØÖÆÔÚ 100 ºÁÃëÄÚ¡£
¶þ¡¢ÓÎÏ·×ÊÔ´±ê×¼»¯µ¼Èë
×ÊÔ´¸ñʽͳһ´¦Àí
½«µØÍ¼Îļþ£¨.map£©¡¢½ÇɫģÐÍ£¨.ani£©¡¢µÀ¾ßͼ±ê£¨.bmp£©×ª»»ÎªÒýÇæ¼æÈݸñʽ£ºµØÍ¼²ð·ÖΪ 128x128 ÏñËØÇø¿é£¬½ÇÉ«¶¯»Ñ¹ËõÖÁÿ֡ 24 λɫÉUI ËØ²ÄͳһΪ PNG ¸ñʽ²¢°´ “Ãæ°åÄ£¿é” ·ÖÀà´æ·Å£¨Èç “±³°ü”“¼¼ÄÜ” Îļþ¼Ð£©¡£
¹Ø¼ü²Ù×÷£ºÓøñʽת»»Æ÷ÅúÁ¿´¦Àí×ÊÔ´£¬È·±£ÎļþÃû´óСдÓëÒýÇæÅäÖÃÎļþ£¨Èç MapInfo.txt£©ÍêȫһÖ¡£
×ÊÔ´Ë÷Òý±í½¨Á¢
±àд XML Ë÷ÒýÎļþ£¬¼Ç¼×ÊԴ·¾¶ÓëÃæ°åµ÷ÓùØÁª¡£ÀýÈ磺¿ØÖÆÃæ°å “±³°ü” °´Å¥µã»÷ʱ£¬Í¨¹ýË÷Òý±í¶¨Î»/Resource/UI/Bag.png·¾¶¼ÓÔØÍ¼±ê£¬Í¬Ê±¹ØÁªµÀ¾ßÊý¾ÝÎļþ£¨ItemData.dat£©¡£
Èý¡¢ºËÐÄϵͳ¿ª·¢ÓëÃæ°åÊÊÅä
½ÇɫϵͳÂ䵨
ÔÚ·þÎñÆ÷¶Ë±àд½ÇÉ«ÊôÐÔ¼ÆËãÂß¼£¨µÈ¼¶¡¢¹¥»÷¡¢·ÀÓù£©£¬Í¨¹ý TCP ÐÒ齫Êý¾Ýͬ²½ÖÁ¿Í»§¶Ë¿ØÖÆÃæ°å¡£¿ØÖÆÃæ°å “½ÇÉ«Ãæ°å” ÐèʵÏÖ£ºÊäÈëGetPlayerAttr(int playerId)Ö¸ÁîÀÈ¡Êý¾Ý£¬²¢Óñí¸ñ×é¼þ¶¯Ì¬äÖȾÊôÐÔÁÐ±í£¬Ö§³Öµã»÷ “×°±¸” °´Å¥´¥·¢×°±¸½çÃæµ¯´°¡£
Õ½¶·ÏµÍ³ÏνÓ
Ϊ¿ØÖÆÃæ°å “¹¥»÷”“¼¼ÄÜ” °´¼üÌí¼ÓÂß¼Åжϣºµã»÷ʱÏÈͨ¹ý UDP ÐÒé·¢ËͲÙ×÷Ö¸ÁîÖÁ·þÎñÆ÷£¬·þÎñÆ÷·µ»Ø “¼¼ÄÜÊͷųɹ¦” ºó£¬¿ØÖÆÃæ°å´¥·¢ÌØÐ§²¥·Å£¨Èç¼¼ÄÜͼ±êÉÁ˸£©¡£Í¬Ê±ÔÚÃæ°åÌí¼ÓÕ½¶·ÈÕÖ¾ÇøÓò£¬ÊµÊ±ÏÔʾ “¹¥»÷Ôì³É XX É˺¦” µÈÐÅÏ¢¡£
ÈÎÎñϵͳǶÈë
ÔÚ¿ØÖÆÃæ°åÐÂÔö “ÈÎÎñ” ±êǩҳ£¬Í¨¹ýGetTaskList(int playerId)½Ó¿ÚÀÈ¡ÈÎÎñÊý¾Ý£¬°´ “Ö÷Ïß / Ö§Ïß” ·ÖÀàչʾ¡£µã»÷ÈÎÎñÌõĿʱ£¬µ÷ÓõØÍ¼ÒýÇæShowTaskNav(int mapId, int posX, int posY)º¯Êý£¬ÔÚÃæ°åСµØÍ¼ÏÔʾµ¼º½±êµã¡£
ËÄ¡¢ÍøÂçͨÐÅÐÒéʵÏÖ
ÐÒéÀàÐÍÆ¥Åä
¿ØÖÆÃæ°åʵʱ²Ù×÷£¨Òƶ¯¡¢¹¥»÷£©²ÉÓà UDP ÐÒé´«Ê䣬ȷ±£µÍÑÓ³Ù£»·Çʵʱ²Ù×÷£¨±³°üÎïÆ·´æ´¢¡¢ÈÎÎñÌá½»£©²ÉÓà TCP ÐÒé±£ÕÏÊý¾ÝÍêÕû¡£ÀýÈç£ºÒÆ¶¯Ö¸Áî·âװΪ[²Ù×÷Âë:0x01, ·½Ïò:1, ËÙ¶È:3]¸ñʽµÄ UDP Êý¾Ý°ü·¢ËÍ¡£
Êý¾Ý°ü¼ÓÃÜÓë½âÎö
ʵÏÖ»ù´¡¼ÓÃÜÂß¼£º¶Ô¿ØÖÆÃæ°å·¢Ë͵ÄÊý¾Ý°üÌí¼Ó¹þϣУÑé룬·þÎñÆ÷½ÓÊÕºóÑé֤УÑéλ£¬Í¨¹ýÔò½âÎöÖ¸Áî²¢Ö´ÐС£½âÎöʾÀý£º½«0x02 0x05 0x03£¨¼¼ÄÜÊÍ·ÅÖ¸Áת»»ÎªSkillCast(5, 3)º¯Êýµ÷Óá£
Îå¡¢²âÊÔÓëÎÊÌâÅŲé
¹¦ÄÜÏìÓ¦²âÊÔ
ÖðÏîÑéÖ¤¿ØÖÆÃæ°å²Ù×÷£ºµã»÷ “ÒÆ¶¯” °´¼ü¹Û²ì½ÇÉ«ÊÇ·ñͬ²½Î»ÒÆ£¬´ò¿ª “±³°ü” ¼ì²éµÀ¾ßͼ±êÊÇ·ñ¼ÓÔØÍêÕû£¬Êͷż¼ÄÜÈ·ÈÏÌØÐ§ÓëÉ˺¦ÊýÖµÊÇ·ñÆ¥Åä¡£Èô³öÏÖÑÓ³Ù£¬¼ì²é UDP ÐÒéµÄÊý¾Ý°ü·¢ËÍÆµÂÊ£¨½¨ÒéÿÃë 10 ´Î£©¡£
×ÊÔ´ÓëÊý¾Ýµ÷ÊÔ
ÓÃÒýÇæ×Ô´øµÄÈÕÖ¾¹¤¾ß²é¿´´íÎóÐÅÏ¢£ºÈôÃæ°åÏÔʾ¿Õ°×£¬ÅŲé×ÊÔ´Ë÷Òý±í·¾¶ÊÇ·ñ´íÎó£»ÈôÊý¾Ý²»Í¬²½£¬¼ì²é·þÎñÆ÷Óë¿Í»§¶ËµÄÐÒé×Ö¶ÎÊÇ·ñÒ»Ö¡£¿Éͨ¹ý×¥°ü¹¤¾ß²é¿´Êý¾Ý°ü½á¹¹£¬¶¨Î»½âÎöÎÊÌâ¡£
¹Ø¼üÏνÓÒªµã
¿ØÖÆÃæ°åÓëÒýÇæµÄ½»»¥Ð轨Á¢Í³Ò»Ê¼þÃüÃû¹æ·¶£¨Èç “Btn_¼¼ÄÜ_1” ¶ÔÓ¦µÚÒ»¸ö¼¼Äܰ´¼ü£©£¬±ÜÃâºóÆÚά»¤»ìÂÒ¡£
×ÊÔ´¼ÓÔØ²ÉÓà “°´Ðè¼ÓÔØ” ģʽ£º´ò¿ª¿ØÖÆÃæ°åijģ¿éʱÔÙ¼ÓÔØ¶ÔÓ¦×ÊÔ´£¬¼õÉÙ³õʼ¼ÓÔØÑ¹Á¦¡£

