锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 褰搕est 璋冪敤灝忎簬0鏃舵渶鍚巚alue鎸囧悜鐨別ax鏄竴涓?CCCCCCCCh錛岃屽浜庡熀鏈暟鎹被鍨嬪ぇ澶歷alue寰楀埌鐨勬槸0CCCCCCCCh鍊? 閭d箞姹囩紪浠g爜浼?xì)濡備? 濡傛灉ob鏄釜絀哄紩鐢ㄧ殑璇濓紝灝卞嚭鍑洪敊錛屽叧浜庤繖縐嶅嚭閿欐槸鍚﹀彲浠ラ氳繃浠涔堟柟寮忛伩鍏嶅憿錛?br>
鍏充簬warning C4715:not all control paths return a value (涓嶆槸鎵鏈夌殑鎺т歡璺緞閮借繑鍥炲?.
闂:
涓涓嚱鏁幫紝涓嶆槸鎵鏈夎礬寰勯兘鏈夎繑鍥炲鹼紝濡備笅:
1) 鍩烘湰鏁版嵁綾誨瀷
瀵逛簬鍑芥暟鐨勫茍涓嶆槸姣忎釜鍒嗘敮閮芥湁榪斿洖鍊鹼紝閭d箞榪欐牱璀﹀憡浼?xì)鎻惤C轟笉鏄墍鏈夎礬寰勯兘鏈夎繑鍥炲箋?/p>
int test( int value )

{
if ( value > 0 ) return value;
}
璋冪敤 int value = test( -1 );
鐪嬩笅test鐨勬眹緙栦唬鐮?
鍏充簬8涓▼搴忓瘎瀛樺櫒涓鑸彧鏈塭sp瀵勫瓨鍣ㄤ綔涓哄叆鏍堬紝鍑烘爤錛岃皟鐢ㄥ拰榪斿洖鎸囦護(hù)浣滀負(fù)鏍堟寚閽堬紝鍏朵綑
姣斿eax,exc絳夊瘎瀛樺櫒閮芥病鏈夊浐瀹氱殑鍚箟鍜屽浐瀹氬?
鐪嬩笅闈est姹囩紪浠g爜.
int test( int value )

{
; 4涓瘎瀛樺櫒鍏ユ爤
; ebp 鐢ㄤ簬瀛樻斁鍑芥暟鏍堢殑鏍堥《鎸囬拡
; esp 鐢ㄤ簬瀛樻斁鍑芥暟鏍堢殑鏍堝簳鎸囬拡
004113A0 push ebp ;灝嗗瘎瀛樺櫒ebp鐨勫唴瀹瑰帇鍏ョ▼搴忔爤
004113A1 mov ebp,esp ;淇濈暀esp瀵勫瓨鍣?br>
004113A3 sub esp,0C0h ;涓鴻鍑芥暟鐣欏嚭涓存椂瀛樺偍鍖?br>
004113A9 push ebx
004113AA push esi
004113AB push edi 
; 鐢?CCCCCCCCh鍒濆鍖栧爢鏍?nbsp;
004113AC lea edi,[ebp-0C0h] ;lea鐩存帴瀵誨潃
004113B2 mov ecx,30h ;鍒╃敤緙栬瘧鍣ㄧ殑offset绔嬪嵆瀵誨潃
004113B7 mov eax,0CCCCCCCCh ;eax=0CCCCCCCCh
004113BC rep stos dword ptr es:[edi] ;鏍規(guī)嵁edi鐨勫ぇ灝忔潵閲嶅鎸囦護(hù)鎵ц嬈℃暟
; 濡傛灉 cmp涓虹湡鍒欐妸value鐨勫間繚瀛樺埌eax瀵勫瓨鍣ㄤ腑
; 鍚﹀垯璺寵漿鍒板湴鍧4113C7h,騫舵病鏈夊eax鍋氬鐞?br>
if ( value > 0 ) return value;
004113BE cmp dword ptr [value],0
004113C2 jle test+27h (4113C7h)
004113C4 mov eax,dword ptr [value]
}
;鍚勬寚閽堝嚭鏍堬紝瀵瑰簲鍓嶉潰3鏉ush
004113C7 pop edi ;寮瑰嚭edi
004113C8 pop esi ;寮瑰嚭esi
004113C9 pop ebx ;寮瑰嚭ebx
004113CA mov esp,ebp ;鎶奺sp閲嶆柊鎸囧悜ebp(鍑芥暟鏍堢殑鏍堥《鎸?br>
閽堬紝test鍑芥暟鏍堥《)
004113CC pop ebp ;ebp閲嶆柊鎸囧悜test璋冪敤鍑芥暟榪斿洖鍦板潃
004113CD ret
璋冪敤姹囩紪浠g爜
int value = test ( 1 );
004113FE push 1
00411400 call test (4110AFh)
00411405 add esp,4 ;Call test 鍑芥暟鏃跺皢鍘嬪叆鏍堟暟鎹紝
鐢變簬鍙湁涓涓弬鏁幫紝鎵浠ュ彧鏈?瀛楄妭
00411408 mov dword ptr [value],eax
濡傛灉鎴戜滑鐨則est鍑芥暟:
int test( int value )

{
if ( value > 0 ) return value;
return 0;
}
if ( value > 0 ) return value;
004113EE cmp dword ptr [value],0
004113F2 jle test+29h (4113F9h)
004113F4 mov eax,dword ptr [value]
004113F7 jmp test+2Bh (4113FBh)
return 0;
004113F9 xor eax,eax ;灝唀ax娓呴浂,浣滀負(fù)榪斿洖鍊?/span>
2 )濡傛灉榪斿洖鐨勬槸涓涓紩鐢ㄥ璞?br>
obj & test( type value )

{
if( type2 ) return obj;
}
obj & ob = test( type1 );
鎴戣寰梬arning C4715灝卞簲璇ユ槸error C4715.璁╁紑鍙戣呬粠鏈寮濮嬪氨閬垮厤榪欑閿欒鐨勫彂鐢熴?br>
]]>
浠嬬粛:
鍒╃敤Win32 鏉ュ鐞哅yGui 3.0.1鐨勪腑鏂囪緭鍏ャ?br>
瀹炵幇:
閰嶇疆榪樻槸鍙傝冪綉涓婄殑閰嶇疆錛屼富瑕佸啀鍔犱腑鏂囧瓧浣?
濡備笅:
鈻?nbsp;鏇存敼閰嶇疆鏂囦歡MyGUI3.0\Media\MyGUI_Media涓?br>
鈽?nbsp;core_font.xml娣誨姞
<Resource type="ResourceTrueTypeFont" name="font_Simhei">
<Property key="Source" value="simhei.ttf"/>
<Property key="Size" value="19"/>
<Property key="Resolution" value="50"/>
<Property key="Antialias" value="false"/>
<Property key="SpaceWidth" value="4"/>
<Property key="TabWidth" value="8"/>
<Property key="CursorWidth" value="2"/>
<Property key="Distance" value="6"/>
<Property key="OffsetHeight" value="0"/>
<Codes>
<Code range="33 126"/>
<Code range="19969 40869"/>
<Code hide="128"/>
<Code hide="1026 1039"/>
<Code hide="1104"/>
</Codes>
</Resource>
鈽?nbsp;simhei.ttf瑕佷粠緋葷粺鐩綍涓嬬殑Fonts鎷瘋礉鍒板綋鍓嶇洰褰曘?br>
鈽?nbsp;core_settings.xml涓皢榛樿瀛椾綋鏀規(guī)垚
<MyGUI type="Font">
<Property key="Default" value="font_Simhei"/>
</MyGUI> 

榪愯Demo瑙e喅鏂規(guī): solution_directx銆?br>
緇橞aseManager娣誨姞Win32娑堟伅鍝嶅簲鍑芥暟void ProcIO(UINT messgae, WPARAM wParam, LPARAM lParam ).
case WM_CHAR:
case WM_KEYDOWN:
case WM_KEYUP:
{
base::BaseManager *baseManager = (base::BaseManager*)GetWindowLongPtr(hWnd, GWL_USERDATA);
if ( baseManager )
baseManager->ProcIO( uMsg , wParam , lParam );
break;
}
ProcIO涓昏鏄
WM_CHAR 瀛楃鍝嶅簲
WM_KEYDOWN/WM_KEYUP 鎸夐敭鍝嶅簲
鍦ㄥ鐞嗗瓧絎﹀搷搴旂殑鏃跺欓渶瑕佸尯鍒嗚緭鍏ユ硶鐘舵佸拰闈炶緭鍏ユ硶鐘舵佺殑瀛楃鍝嶅簲銆?br>
case WM_CHAR:
{
if ( ImmIsIME( GetKeyboardLayout(0) ))
ProcChar( wParam , lParam );
else
{
MyGUI::InputManager::getInstance().injectKeyPress(MyGUI::KeyCode::Enum(scan_code), code_point);
};
}
break;
ProcChar鍑芥暟涓昏澶勭悊涓枃銆傚洜涓烘眽瀛椾負(fù)8涓瓧鑺備細(xì)鍝嶅簲WM_CHAR2嬈°傞渶瑕佽繘琛岀粍鍚堜竴嬈°?br>WM_KEYDOWN錛氫富瑕佸鐞嗕竴浜沇idget瀛楃杈撳叆銆傚悓鏃惰繕鍙互鍋氬叏灞閿洏?shù)俊鎭洃鎺уQ堝揩鎹烽敭錛?
鍒ゆ柇涓涓猈idget鏄惁鍙互榪涜瀛楃杈撳叆:
\MyGUIEngine\include\MyGUI_InputManager.cpp
bool InputManager::isKeyInputCapture()
{
if( !mWidgetKeyFocus ) return false;
std::string strName = mWidgetKeyFocus->getTypeName();
if ( strName == "ComboBox" ||
strName == "Edit" ||
strName == "Message" ||
strName == "List")
{
return true;
}
return false;
}
鐢變簬閲囩敤Win32閿洏娑堟伅錛屽簲璇ュ睆钄借嚜甯IS鐨勩?br>Input\OIS\InputManager.cpp
void InputManager::captureInput()
{
if (mMouse) mMouse->capture();
//mKeyboard->capture();
}
鍦―emo涓洃鎺ф寜閿秷鎭? DemoKeeper鍔熻兘鏄疷IManager )銆?br>
void DemoKeeper::injectKeyPress(MyGUI::KeyCode _key, MyGUI::Char _text)
{
if (_key == MyGUI::KeyCode::Grave)
{
mConsole->setVisible(!mConsole->isVisible());
return;
}
else if (_key == MyGUI::KeyCode::F2 )
{
MyGUI::Message::createMessageBox("Message", "Info", "Press F2 ", MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconInfo);
return;
}
else if (_key == MyGUI::KeyCode::F3 )
{
MyGUI::Message::createMessageBox("Message", "Info", "Press F3 ", MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconInfo);
return;
}
base::BaseManager::injectKeyPress(_key, _text);
}
鏈鍚庨檮涓婃簮鐮佽В鍐蟲(chóng)柟妗?
/Files/expter/MyGuiDemo.rar
鍥劇墖錛?img border=0 alt="" src="http://m.shnenglu.com/images/cppblog_com/expter/mygui.jpg" width=417 height=317>
]]>
]]>
閽堝鑷繁鐨勪竴涓唴瀛樻睜濡備綍嫻嬭瘯鍏舵ц兘.
浠嬬粛錛?br>1.鍐呭瓨姹犳祴璇曠敤渚嬬殑閫夊彇.
1.鍗曠嚎紼嬬殑鍒嗛厤鍜岄噴鏀?
2.鍐呭瓨鍥炴敹.
3.鎬ц兘鍏蟲(chóng)敞.
鍏充簬鍐呭瓨姹犵殑璁捐鍜屽疄鐜扮綉涓婇亶鍦伴兘鏄紝鏈枃涓嶅叿浣撲粙緇嶅叧浜庡唴瀛樻睜鐨勫叿浣撳疄鐜板拰鏂瑰紡錛屼富瑕佹槸浠嬬粛璁捐涓涓唴瀛樻睜鎬庢牱鍘繪祴璇曞叾鎬ц兘鍜屽畨鍏ㄥ鐞嗭紝鏈変竴涓紑婧愮殑鍐呭瓨姹犻」鐩畉cmalloc涔熸湁浠嬬粛寰堝錛屼絾鏄負(fù)浜?jiǎn)婊…憶_縐嶉渶姹傦紝浠g爜榪囦簬搴炲ぇ錛屾渶鍚庢垜鐢ㄦ潵嫻嬭瘯鍒嗛厤鎬ц兘嫻嬭瘯銆?/p>
1涓唴瀛樻睜鐨勬祴璇曠敤渚嬪簲璇ュ寘鍚細(xì)
1錛夎欏圭洰鍐呭瓨鍒嗛厤姒傜巼闅忔満鎬?
2錛夊悓鏃朵繚璇侀噴鏀劇殑闅忔満鎬?
3錛夊彲浠ユ敮鎸佸縐嶅垎閰嶆柟寮忥紙涓嶅悓澶у皬錛屼笉鍚屽璞″弬鏁扮瓑錛?
瑕佽揪鍒頒笂闈㈣姹傚垯鍙互璁捐
1.涓涓暟緇勬潵璁懼畾闇瑕佸垎閰嶇殑澶у皬銆?br> long arr[ ] = { 16,32,64,128,256,512,1024,2048,5120,5130,7000,6000,10240,15000,20000};
2.鏍規(guī)嵁闇姹傛潵鎸囧畾鍚勪釜澶у皬鐨勫垎閰嶅嚑鐜囷紝榪欏ソ姣旀湁澶氬皯姒傜巼閫変腑鏌愪釜鏁幫紙闇鐗瑰畾鐨勫垎閰嶏級(jí):
A.閽堝榪欎釜闇姹傚彲浠ヨ瀹氬畾涓涓鐜囨暟緇凮dds,鏁扮粍鍊糰rrArr鐨勭儲(chǔ)寮曘?br>
B.閽堝Odds鎸囧畾鏁扮粍鏁版嵁錛屼嬌鍏舵暟鎹垎閰嶈揪鍒癮rr闇瑕佸垎閰嶆鐜囥?br>
/**//// 琚垎閰嶇殑姒傜巼
long Odds[ ] =
{ 0,0,0,1,1,2,2,2,3,3,4,4,4,4,5,5,5,5,6,6,,7,7,7,8,8,8,8,9,9,9,10,10,11,12,12};
C.闅忔満Odds鏁扮粍錛岀劧鍚庡緱鍒板叾鍊煎垎閰嶏紝鍏跺煎垯涓篈rr鐨勭儲(chǔ)寮曘?br>
long Asize= arr[ Odds[ rand()%size ] ] ;
3.閲婃斁淇濊瘉闅忔満鎬с?br> 浠涔堟椂鍊欓噴鏀撅紝浠ュ強(qiáng)鍒嗛厤浜?jiǎn)鍋氫粈涔堢敤錛岄兘鏄張搴旂敤灞傚喅瀹氱殑錛屾墍浠ラ渶瑕佹妸鍒嗛厤鍑烘潵鐨勫唴瀛橀氳繃涓涓鍣ㄦ潵瀛樺偍.
鐢變簬鍒嗛厤鏄殢鏈烘э紝閭d箞閲婃斁鐨勬椂鍊欎篃淇濊瘉浜?jiǎn)闅忔満鎬с?br>
4.鏀寔澶氱鍒嗛厤鏂瑰紡銆?br> A. 瀵硅薄鍒嗛厤:
MemFactory Memory;
A* a = Memory.Alloc<A>( );
B* b = Memory.Alloc<B,int>( 2 );
Memory.FreeObj( a );
Memory.FreeObj( b );B.鐩存帴鍒嗛厤
void* p1 = Memory.Alloc( Asize );
5.鎬ц兘嫻嬭瘯
涓轟簡(jiǎn)嫻嬭瘯鎬ц兘錛屾垜閫夋嫨浜?jiǎn)鍒嗛?000W嬈★紝鍏朵腑鐢ㄤ竴涓鍣ㄤ繚瀛樺垎閰嶇殑鏁版嵁錛岀劧鍚庡綋瀹瑰櫒鍒拌揪100W鐨勬椂鍊欓噴鏀?0W鏁版嵁(淇濊瘉鏁版嵁姝e湪浣跨敤錛岄殢鏈洪噴鏀?銆?br> 涓嬮潰鐨凙lloc time 鍙槸緇熻鐨凙lloc鏃墮棿绱姞錛孎ree time鍙槸緇熻鐨凢ree 鏃墮棿绱姞錛孴otal time璁板綍榪欐嫻嬭瘯鎬誨叡鑺辮垂鏃墮棿銆?/p>
嫻嬭瘯緇撴灉濡備笅:
MemPool Alloc time 3242 ms Free time: 2412 ms Total time 22535 ms
System Alloc time 33616 ms Free time: 6676 ms Total time 55013 ms
TCMalloc Alloc time 3451 ms Free time 1896 ms Toal time 21078 ms
鍙互鐪嬪埌TCMalloc鐨勫垎閰嶅拰閲婃斁閮芥瘮杈冨揩銆傘?br> 7
鍏朵腑arr姣忎釜鍒嗛厤鐨勫ぇ灝忓懡涓鐜囥?br> 9
Count[ 1 ] = 2436395
Count[ 2 ] = 1281728
Count[ 3 ] = 1026009
Count[ 4 ] = 769123
Count[ 5 ] = 768911
Count[ 6 ] = 769335
Count[ 7 ] = 640757
Count[ 8 ] = 640974
Count[ 9 ] = 512378
Count[ 10 ] = 384841
Count[ 11 ] = 256135
Count[ 12 ] = 257367
Count[ 13 ] = 256047
PS錛?br>1.鍐呭瓨姹犵殑浣跨敤錛?br>
涓鑸儏鍐典笅鍐呭瓨姹狅紝鏄暣鐞嗕竴鏁村潡鍐呭瓨錛岀劧鍚庨氳繃涓涓猯ist涓茶繛璧鋒潵錛岀劧鍚庡垎閰嶇殑鏃跺欎粠閾捐〃涓幏鍙栵紝閲婃斁涔熸槸鎻掑叆鍒伴摼琛ㄤ腑銆?br>
涓轟簡(jiǎn)鏂逛究澶氬璞$殑澶氬弬鏁頒互鍙?qiáng)鏃犲弬鏁扮殑鍒嗛厤锛屽彲浠ヤ竴浜涘垪瀹忓拰妯℃澘鏉ュ疄鐜?
鍏蜂綋鐨勫彲浠ュ弬鑰冨悗闈㈤檮甯︾殑鍐呭瓨姹犲疄鐜扮殑浠g爜:
#define DEFINE_CALL_CON( paramcount ) template <class T, DP_STMP_##paramcount( typename, tp ) >\
inline T * Alloc(DP_MTMP_##paramcount( tp, p ) )
{\
unsigned long lSize = sizeof(T);\
void* ptMem = Alloc(lSize);\
if( !ptMem) return NULL; \
T * pt = new(ptMem)T( LP_SNMP_##paramcount( p ) );\
return pt;\
}
A. 瀵硅薄鍒嗛厤:
MemFactory Memory;
A* a = Memory.Alloc<A>( );
B* b = Memory.Alloc<B,int>( 2 );
C* c = Memory.Alloc<C,int,const char*>(1,"dd");
Memory.FreeObj( a );
Memory.FreeObj( b );
B.鐩存帴鍒嗛厤
void* p1 = Memory.Alloc( Asize );
2.鍐呭瓨姹犵殑浠g爜錛?br> 1) 瀹炵幇鍏ㄦ槸鍒╃敤鐨刦reelist,鍑忓皯鍐呭瓨寮閿錛屽垎閰嶉熷害錛岀洿鎺ュ畾浣嶃?br> 2) 綆$悊閮芥槸閫氳繃宸ュ巶綾繪潵鍚屼竴鐨勭鐞嗐?br> 3) 鎸囧畾鍒嗛厤絳栫暐.
婧愮爜涓篤s2008鐗堟湰...
/Files/expter/Pool.rar
鍏充簬瀹炵幇鏈夌枒闂拰寤鴻錛屽彲浠ユ彁鍑哄疂璐電殑鎰忚銆傘?/p>
struct node

{
node(int i)
{data = i;}
int data;
}
int _tmain(int argc, _TCHAR* argv[])

{
typedef std::map<long,node*> Mptable;
typedef std::vector<node*> Vec;
typedef std::list<node*> List;
Mptable mapnode;
Vec vecnode;
List listnode;
for(int i = 1 ; i <= 100000 ; i++ )
{
mapnode [ i ] = new node(i);
vecnode.push_back( new node(i) );
listnode.push_back( new node(i));
}
long time = timeGetTime( );
for( Mptable::iterator itr = mapnode.begin() ; itr != mapnode.end() ; )
{
delete itr->second;
mapnode.erase( itr++ );
}
std::cout <<"map : spend " << timeGetTime() - time << " msec " << std::endl;

time = timeGetTime( );
for( Vec::iterator itr = vecnode.begin() ; itr != vecnode.end() ; )
{
delete *itr;
itr = vecnode.erase( itr );
}
std::cout <<"vector : spend " << timeGetTime() - time << " msec " << std::endl;

time = timeGetTime( );
for( List::iterator itr = listnode.begin() ; itr != listnode.end() ; )
{
delete *itr;
itr = listnode.erase( itr );
}
std::cout <<"list : spend " << timeGetTime() - time << " msec" << std::endl;

return 0;
}
iterator erase(const_iterator _Where)
{ // erase element at where
_Move(_VIPTR(_Where) + 1, this->_Mylast,
_VIPTR(_Where));
_Destroy(this->_Mylast - 1, this->_Mylast);
--this->_Mylast;
return (_Make_iter(_Where));
}
iterator erase(const_iterator _Where)
{ // erase element at _Where
#if _ITERATOR_DEBUG_LEVEL == 2
if (_Where._Getcont() != this || _Where._Ptr == this->_Myhead)
_DEBUG_ERROR("list erase iterator outside range");
_Nodeptr _Pnode = (_Where++)._Mynode();
_Orphan_ptr(*this, _Pnode);
#else /* _ITERATOR_DEBUG_LEVEL == 2 */
_Nodeptr _Pnode = (_Where++)._Mynode();
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */
if (_Pnode != this->_Myhead)
{ // not list head, safe to erase
this->_Nextnode(this->_Prevnode(_Pnode)) =
this->_Nextnode(_Pnode);
this->_Prevnode(this->_Nextnode(_Pnode)) =
this->_Prevnode(_Pnode);
_Dest_val(this->_Alnod, _Pnode);
this->_Alnod.deallocate(_Pnode, 1);
--this->_Mysize;
}
return (_Make_iter(_Where));
}
涓涓畝鍗曠殑娓告垙鐨勫叿浣撶幆澧冨涓?
1.涓涓凍鐞冨満(FootBallPitch)
2.涓涓凍鐞?nbsp; FootBall
3.浜屼釜鐞冮棬 Goal
4.浜屼釜鐞冮槦 FootBallTeam
5.鍦轟笂12鍚嶈凍鐞冮槦鍛橈紙姣忛槦6鍚嶏紝鏈熶腑5鍚嶄負(fù)鐞冨憳2鍚嶅悗鍗?鍚嶅墠閿嬶紝榪樻湁1鍚嶅畧闂ㄥ憳錛?br> 6.鐞冨憳 FootBaller 瀹堥棬鍛?nbsp; GoalKeeper
鐒跺悗鍙鐞嗘竻涓婇潰鐨勬弿榪扮劧鍚庢妸鍏蜂綋鐨勫疄鐜板皝瑁呭埌姣忎釜綾諱腑錛屽氨瀹炵幇浜?涓畝鍗曠殑瓚崇悆浠跨湡妯℃嫙錛屽疄鐜頒笂闈㈢殑鍔熻兘浠g爜榪樻槸綆鍗曪紝浣嗘槸濡備綍緇勭粐寮哄ぇ鏀誨嚮鎬у己澶э紝闃插盡鎬у己鐨凙I榪樻槸鎸哄鏉傜殑銆?br>
涓嬮潰灝嗙粰鍑哄叿浣擄嫉錛棘瀹炵幇綾誨浘錛?nbsp;
鐢變簬鏄熀浜庢櫤鑳戒綋鐨勮凍鐞冿肌錛╂墍浠ヨ繕鏄熼壌浜?jiǎn)镫u錛籌輯妯″瀷錛屾垜浠彲浠ユ妸姣忎釜Player澶勪簬涓嶅悓鐨勭姸鎬佽繘琛屼笉鍚岀殑鎿嶄綔錛屽叿浣撴妸鎿嶄綔綾誨瀷鍜屼簨浠跺鐞嗛兘鏀懼湪鍏蜂綋鐨勭姸鎬佷腑銆?br> 鍩轟簬鐞冨満涓婅繍鐞冪殑FootBaller鏈変笅鍒楃姸鎬丆haseBall 榪界悆鐘舵侊紝Dribble榪愮悆 Gohome 褰掍綅 KickBall 韙㈢悆 ReceviveBall浼犵悆
鍩轟簬瀹堥棬鍛楪oalKeeper鏈塈nterceptBall 鎷︽埅 PutBallBackInPlay鍙戠悆.
榪欓噷涓轟簡(jiǎn)鍖哄垎闃熷憳鏄墠閿嬭繕鏄悗鍗紝鎴戜滑緇欓槦鍛樺鍔犱竴涓涓築ehaviors錛岃鍏舵牴鎹嚜宸辯殑琛屼負(fù)鍋氱浉搴旂殑浜嬫儏.銆?br>
鍏朵腑鎵鏈夌殑鍥懼儚澶勭悊閮芥槸鐢ㄧ殑GDI鐨勭粯鍒訛紝紼嬪簭閲囩敤鐨刉in32緙栧啓鏂瑰紡銆?br>
涓婇潰鐨勮璁″熀鏈槸鐜板湪紼嬪簭鐨勮璁℃柟妗堝拰嫻佺▼鍥俱?br>
鍚庢湡瀹屽杽閮ㄥ垎錛?br> 1.寮曞叆鍩轟簬浜嬩歡鍝嶅簲錛孎ootBaller 鍙互閫氱煡鍚岄槦FootBaller 鐨勬帴鏀跺搷搴旂殑娑堟伅澶勭悊錛屾瘮濡侫鍙戠幇B鐨勪綅緗緢濂斤紝A鍙互閫氱煡B鎴戣浼犵悆鍒頒竴涓潗鏍囩偣銆?br> 2.鍔犲己闃插盡鍜屾敾鍑籄I銆?br> 3.瀹屾垚鍏蜂綋鏂規(guī)鍚庯紝鍏竷鎵鏈夌殑鏂規(guī)璁捐鍜屽叿浣撶畻娉曪紝鍚庢湡寮曞叆鑴氭湰鏈哄埗錛岄氳繃澶栭儴緙栧啓鑴氭湰瀹炵幇涓嶅悓闃熶紞AI妯℃嫙銆?nbsp;