真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

瘋狂ios之瘋狂打飛機(jī)游戲(3)-創(chuàng)新互聯(lián)

13.14.7添加敵機(jī)

游戲當(dāng)中怎么能少了千軍萬(wàn)馬的敵人呢?現(xiàn)在,我們來(lái)添加一些敵機(jī),大量的敵機(jī)將從屏幕上方隨機(jī)出現(xiàn),并以隨機(jī)的速度向下俯沖。這些敵機(jī)暫時(shí)不會(huì)發(fā)射×××,之后讀者可以自己添加該功能。具體步驟如下。

10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有拱墅免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

自定義一個(gè)FKSprite類,繼承自CCSprite,因?yàn)閯?chuàng)建的敵機(jī)玩家會(huì)發(fā)射×××去消滅,為了增加游戲的趣味性和難度,需要加入敵機(jī)的生命值、血條和爆炸效果等特效。在FKSprite類中定義了相關(guān)變量用于存儲(chǔ)數(shù)據(jù)。實(shí)現(xiàn)代碼如下。

程序清單:codes/13/13.14/AirfightGame/AirfightGame/FKSprite.h

@interface FKSprite : CCSprite {

}

// 精靈的生命值

@property int lifeValue;

// 精靈的名稱

@property NSString* name;

// 敵機(jī)的血條

@property CCProgressTimer* enemyPlaneHP;

// 血條的更新量

@property float HPInterval;

@end

打開HelloWorldLayer.m文件,添加兩個(gè)變量,實(shí)現(xiàn)代碼如下。

// 敵機(jī)數(shù)組

CCArray* enemyPlaneArray;

// 游戲幀計(jì)數(shù)器

NSInteger count;

在私有分類中添加兩個(gè)和敵機(jī)相關(guān)的方法,實(shí)現(xiàn)代碼如下。

// 更新敵機(jī)

-(void) updateEnemySprite:(ccTime)delta;

// 敵機(jī)離開屏幕刪除

-(void) removeEnemySprite:(ccTime)delta;

updateEnemySprite:用于控制敵機(jī)的創(chuàng)建、俯沖。實(shí)現(xiàn)代碼如下。

程序清單:codes/13/13.14/AirfightGame/AirfightGame/HelloWorldLayer.m

-(void) updateEnemySprite:(ccTime)delta{

// 控制count為100的倍數(shù)時(shí)添加一架敵機(jī)

if (count % 30 == 0)

{

// FKSprite精靈對(duì)象繼承自CCSprite,增加了生命值

FKSprite* enemyPlaneSprite;

// 根據(jù)rand隨機(jī)數(shù)添加不同的敵機(jī)

int rand = arc4random() % 2;

// 使用隨機(jī)數(shù)來(lái)設(shè)置敵機(jī)的X坐標(biāo)

int randX = arc4random() % (screenWidth - 40) + 20;

switch(rand)

{

case 0:

// 創(chuàng)建代表敵機(jī)

enemyPlaneSprite = [FKSprite spriteWithSpriteFrameName:@"e0.png"];

enemyPlaneSprite.position = ccp(randX,480+enemyPlaneSprite.contentSize.height);

enemyPlaneSprite.name = @"e0";

enemyPlaneSprite.lifeValue = 1;

break;

case 1:

// 創(chuàng)建代表敵機(jī)

enemyPlaneSprite = [FKSprite spriteWithSpriteFrameName:@"e2.png"];

enemyPlaneSprite.position = ccp(randX,480+enemyPlaneSprite.contentSize.height);

enemyPlaneSprite.name = @"e2";

enemyPlaneSprite.lifeValue = 1;

break;

}

// 獲取隨機(jī)時(shí)間(敵機(jī)俯沖的時(shí)間)

float durationTime = arc4random() %2 + 2;

// 敵機(jī)俯沖

id moveBy = [CCMoveBy actionWithDuration:durationTime

position:ccp(0,-enemyPlaneSprite.position.y-enemyPlaneSprite.contentSize.height)];

[enemyPlaneSprite runAction:moveBy];

// 將敵機(jī)精靈添加到敵機(jī)數(shù)組中

[enemyPlaneArray addObject:enemyPlaneSprite];

// 獲得精靈表單

CCSpriteBatchNode *batchNode = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];

[batchNode addChild:enemyPlaneSprite z:4];

}else{

if (count % 200 == 0)

{

int randX = arc4random() % (screenWidth - 40) + 20;

// FKSprite精靈對(duì)象繼承自CCSprite,增加了生命值

FKSprite* enemyPlaneSprite;

// 創(chuàng)建代表敵機(jī)

enemyPlaneSprite = [FKSprite spriteWithSpriteFrameName:@"e1.png"];

enemyPlaneSprite.position = ccp(randX,480+enemyPlaneSprite.contentSize.height);

enemyPlaneSprite.name = @"e1";

enemyPlaneSprite.lifeValue = 10;

// 獲取隨機(jī)時(shí)間(敵機(jī)掉落的時(shí)間)

float durationTime = arc4random() %2 + 2;

// 敵機(jī)俯沖

id moveBy = [CCMoveBy actionWithDuration:durationTime

position:ccp(0,-enemyPlaneSprite.position.y-enemyPlaneSprite.contentSize.height)];

[enemyPlaneSprite runAction:moveBy];

// 將敵機(jī)精靈添加到敵機(jī)數(shù)組中

[enemyPlaneArray addObject:enemyPlaneSprite];

// 獲得精靈表單

CCSpriteBatchNode *batchNode = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];

[batchNode addChild:enemyPlaneSprite z:4];

// 創(chuàng)建一個(gè)進(jìn)度條精靈

CCSprite* barSprite = [CCSprite spriteWithFile:@"planeHP.png"];

// 初始化一個(gè)CCProgressTimer對(duì)象

CCProgressTimer* enemyPlaneHP = [CCProgressTimer progressWithSprite:barSprite];

// setPercentage:0.0f,表示并未加載任何資源,表現(xiàn)在畫面上就是什么也看不見

[enemyPlaneHP setPercentage:0.0f];

// 由于圖片大小關(guān)系,把scale設(shè)置成0.15,即縮小一半

enemyPlaneHP.scale = 0.15;

enemyPlaneHP.midpoint = ccp(0,0.5);

enemyPlaneHP.barChangeRate = ccp(1, 0);

enemyPlaneHP.type = kCCProgressTimerTypeBar;

enemyPlaneHP.percentage = 100;

CGPoint pos = enemyPlaneSprite.position;

enemyPlaneHP.position = ccp(pos.x, pos.y+32);

[self addChild:enemyPlaneHP];

id moveBy2 = [CCMoveBy actionWithDuration:durationTime

position:ccp(0,-enemyPlaneSprite.position.y-enemyPlaneSprite.contentSize.height)];

[enemyPlaneHP runAction:moveBy2];

enemyPlaneSprite.enemyPlaneHP = enemyPlaneHP;

enemyPlaneSprite.HPInterval = 100.0 / (float)enemyPlaneSprite.lifeValue;

}

}

}

這段代碼有點(diǎn)長(zhǎng),接下來(lái)為大家詳細(xì)解釋。

首先,游戲中出現(xiàn)的小敵機(jī)有3種,通過(guò)count變量來(lái)控制敵機(jī)出現(xiàn)的頻率(count變量在update方法中自增)。

當(dāng)count%30==0時(shí),隨機(jī)創(chuàng)建兩種小飛機(jī),對(duì)應(yīng)e0.png和e2.png圖片,設(shè)置生命值為1。接下來(lái)獲取一個(gè)隨機(jī)俯沖時(shí)間,根據(jù)該時(shí)間創(chuàng)建一個(gè)moveBy動(dòng)作,讓飛機(jī)執(zhí)行moveBy動(dòng)作俯沖。同時(shí)將敵機(jī)精靈添加到敵機(jī)數(shù)組和精靈表單當(dāng)中。

當(dāng)count%200==0時(shí),創(chuàng)建一種小飛碟,對(duì)應(yīng)e1.png圖片,設(shè)置生命值為10。接下來(lái)獲取一個(gè)隨機(jī)俯沖時(shí)間,根據(jù)該時(shí)間創(chuàng)建一個(gè)moveBy動(dòng)作,讓飛機(jī)執(zhí)行moveBy動(dòng)作俯沖。同時(shí)將敵機(jī)精靈添加到敵機(jī)數(shù)組和精靈表單當(dāng)中。之后使用前面用過(guò)的CCProgressTimer類創(chuàng)建了一個(gè)血條,游戲中血條會(huì)隨著敵機(jī)被玩家飛機(jī)的×××打中而減少,從而實(shí)現(xiàn)非常炫的射擊效果。

removeEnemySprite的作用是當(dāng)敵機(jī)已經(jīng)移出屏幕外時(shí)刪除敵機(jī)精靈。實(shí)現(xiàn)代碼如下。

程序清單:codes/13/13.14/AirfightGame/ AirfightGame/HelloWorldLayer.m

-(void) removeEnemySprite:(ccTime)delta{

// 獲得精靈表單

CCSpriteBatchNode *batchNode = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];

// 定義循環(huán)變量

CCSprite* enemyPlaneSprite;

// 遍歷所有的敵機(jī)精靈

CCARRAY_FOREACH(enemyPlaneArray, enemyPlaneSprite){

// 如果敵機(jī)已經(jīng)移出屏幕外,則刪除敵機(jī)精靈

if (enemyPlaneSprite.position.y <= -enemyPlaneSprite.contentSize.height)

{

// 從精靈表單中刪除該敵機(jī)精靈

[batchNode removeChild:enemyPlaneSprite cleanup:YES];

// 從敵機(jī)數(shù)組中刪除該敵機(jī)精靈

[enemyPlaneArray removeObject:enemyPlaneSprite];

}

}

}

removeEnemySprite:比較簡(jiǎn)單,首先調(diào)用getChildByTag:方法獲取精靈表單,然后遍歷敵機(jī)數(shù)組,判斷敵機(jī)的y軸若超出屏幕范圍,則從精靈表單和敵機(jī)數(shù)組中刪除敵機(jī)精靈。

找到onEnter方法,在⑤部分代碼后初始化敵機(jī)數(shù)組,實(shí)現(xiàn)代碼如下(程序清單同上)。

enemyPlaneArray = [[CCArray alloc] init];

修改update方法,實(shí)現(xiàn)代碼如下(程序清單同上)。

-(void) update:(ccTime)delta{

count++;

[self updateBackground:delta];

[self updateEnemySprite:delta];

[self removeEnemySprite:delta];

}

再次編譯并運(yùn)行游戲,大量的敵機(jī)會(huì)隨機(jī)出現(xiàn),并向屏幕下方俯沖。模擬器顯示效果如圖13.63所示。

瘋狂ios之瘋狂打飛機(jī)游戲(3)

13.14.8玩家飛機(jī)添加×××并射擊

現(xiàn)在,大量的敵機(jī)向玩家飛機(jī)俯沖過(guò)來(lái),不用多說(shuō),給玩家飛機(jī)添加×××射擊功能打爆它們。這里我們?cè)O(shè)計(jì)成×××自動(dòng)發(fā)射,并且×××是無(wú)限的,這樣玩家就只需要專心控制飛機(jī)的飛行就可以了。具體步驟如下。

打開HelloWorldLayer.m文件,添加變量,實(shí)現(xiàn)代碼如下(程序清單同上)。

// 代表×××精靈數(shù)組

CCArray* bulletArray;

在私有分類中添加3個(gè)和敵機(jī)相關(guān)的方法,實(shí)現(xiàn)代碼如下(程序清單同上)。

// 更新×××

-(void) updateShooting:(ccTime)delta;

// ×××離開屏幕,刪除

-(void) removeBulletSprite:(ccTime)delta;

// 碰撞檢測(cè)

-(void) collisionDetection:(ccTime)delta;

updateShooting:方法用于不斷發(fā)射×××。實(shí)現(xiàn)代碼如下(程序清單同上)。

-(void) updateShooting:(ccTime)delta{

// 獲得精靈表單

CCSpriteBatchNode *batchNode = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];

// 飛機(jī)精靈坐標(biāo)

CGPoint pos = planeSprite.position;

// 控制count為8的倍數(shù)時(shí)發(fā)射一顆×××

if(count % 8 == 0)

{

// 創(chuàng)建代表×××的精靈

CCSprite* bulletSprite = [CCSprite spriteWithSpriteFrameName:@"bullet.png"];

// 設(shè)置×××坐標(biāo)

CGPoint bulletPos = ccp(pos.x, pos.y +

planeSprite.contentSize.height/2 + bulletSprite.contentSize.height);

bulletSprite.position = bulletPos;

// ×××移動(dòng)時(shí)間為0.4秒,移動(dòng)距離為屏幕高度-×××的y軸

id moveBy = [CCMoveBy actionWithDuration:0.4f position:ccp(0, screenHeight-bulletPos.y)];

[bulletSprite runAction:moveBy];

// 將×××精靈添加到精靈表單中

[batchNode addChild:bulletSprite z:4];

// 將×××精靈添加到×××精靈數(shù)組中

[bulletArray addObject:bulletSprite];

}

}

updateShooting:方法并不復(fù)雜,首先獲取精靈表單,然后獲取玩家飛機(jī)的坐標(biāo)位置,當(dāng)count%8==0時(shí)創(chuàng)建一顆×××精靈,并執(zhí)行moveBy動(dòng)作達(dá)到發(fā)射×××的效果,最后將×××精靈添加到精靈表單和×××精靈數(shù)組當(dāng)中。

removeBulletSprite:方法的作用是當(dāng)×××精靈已經(jīng)移出屏幕外時(shí)刪除×××精靈。實(shí)現(xiàn)代碼如下(程序清單同上)。

-(void) removeBulletSprite:(ccTime)delta{

// 獲得精靈表單

CCSpriteBatchNode *batchNode = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];

CCSprite* bulletSprite;

// 遍歷所有的×××

CCARRAY_FOREACH(bulletArray, bulletSprite){

// 如果×××已經(jīng)移出屏幕外,則刪除×××

if (bulletSprite.position.y >=screenHeight){

// 從精靈表單中刪除該×××精靈

[batchNode removeChild:bulletSprite cleanup:YES];

// 從×××數(shù)組中刪除該×××精靈

[bulletArray removeObject:bulletSprite];

}

}

}

removeBulletSprite:方法也比較簡(jiǎn)單,首先調(diào)用getChildByTag:方法獲取精靈表單,然后遍歷×××數(shù)組,判斷×××的y軸若超出屏幕范圍,則從×××表單和×××數(shù)組中刪除×××精靈。

collisionDetection:是檢查玩家飛機(jī)和敵機(jī)碰撞或者×××和敵機(jī)碰撞的方法。實(shí)現(xiàn)代碼如下(程序清單同上)。

-(void) collisionDetection:(ccTime)dt{

// 獲得精靈表單

CCSpriteBatchNode *batchNode = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];

// 定義循環(huán)變量

FKSprite* enemyPlaneSprite;

CCSprite* bulletSprite;

// 遍歷敵機(jī)數(shù)組

CCARRAY_FOREACH(enemyPlaneArray, enemyPlaneSprite){

// 玩家飛機(jī)和敵機(jī)發(fā)生碰撞

if(CGRectIntersectsRect(planeSprite.boundingBox,enemyPlaneSprite.boundingBox)){

// 播放爆炸動(dòng)畫

[self bombAnimate:@"blast" :enemyPlaneSprite.position ];

// 刪除敵機(jī)精靈

[enemyPlaneArray removeObject:enemyPlaneSprite];

[batchNode removeChild:enemyPlaneSprite cleanup:YES];

[planeSprite stopAllActions];

// 刪除玩家精靈

[batchNode removeChild:planeSprite cleanup:YES];

[self gameOver:@"游戲結(jié)束!"];

}

// 遍歷×××數(shù)組

CCARRAY_FOREACH(bulletArray, bulletSprite){

// 如果敵機(jī)與×××發(fā)生碰撞

if(CGRectIntersectsRect(enemyPlaneSprite.boundingBox, bulletSprite.boundingBox)){

// 播放×××音效

[[SimpleAudioEngine sharedEngine] playEffect:@"bullet.mp3"];

// 刪除×××精靈

[bulletArray removeObject:bulletSprite];

[batchNode removeChild:bulletSprite cleanup:YES];

// 敵機(jī)生命值減1

enemyPlaneSprite.lifeValue--;

// 血條減少

if (enemyPlaneSprite.enemyPlaneHP != nil) {

enemyPlaneSprite.enemyPlaneHP.percentage

= enemyPlaneSprite.HPInterval * enemyPlaneSprite.lifeValue;

}

// 判斷敵機(jī)的生命值

if (enemyPlaneSprite.lifeValue <= 0) {

// 刪除敵機(jī)精靈

[enemyPlaneArray removeObject:enemyPlaneSprite];

[batchNode removeChild:enemyPlaneSprite cleanup:YES];

// 播放爆炸動(dòng)畫

[self bombAnimate:@"blast" :enemyPlaneSprite.position ];

// 播放爆炸音效

[[SimpleAudioEngine sharedEngine] playEffect:@"b0.mp3"];

}

break;

}

}

}

}

collisionDetection:方法首先調(diào)用getChildByTag:方法獲取精靈表單,然后循環(huán)遍歷敵機(jī)數(shù)組。CGRectIntersectsRect(rect 1.feet 2)函數(shù)可以判斷矩形結(jié)構(gòu)是否交叉,兩個(gè)矩形對(duì)象是否重疊,常用來(lái)檢測(cè)兩個(gè)圖標(biāo)是否發(fā)生碰撞。CCNode有一個(gè)屬性boundingBox,會(huì)返回精靈的邊界框。使用這個(gè)屬性比自己計(jì)算要好,因?yàn)檫@樣做更簡(jiǎn)單,同時(shí)也考慮了精靈的變形。通過(guò)CGRectIntersectsRect(rect 1.feet 2)函數(shù)判斷玩家飛機(jī)和敵機(jī)是否發(fā)生碰撞,如果發(fā)生碰撞,則播放一段爆炸動(dòng)畫,然后從敵機(jī)數(shù)組和精靈表單中刪除敵機(jī)精靈,再?gòu)木`表單中刪除玩家飛機(jī)精靈,最后調(diào)用gameOver:方法結(jié)束游戲。

如果玩家飛機(jī)和敵機(jī)沒有發(fā)生碰撞,則不循環(huán)遍歷×××數(shù)組,判斷×××和敵機(jī)是否發(fā)生碰撞,如果發(fā)生碰撞,則播放×××音效,刪除×××精靈,將敵機(jī)生命值減去1;如果敵機(jī)有血條,則更新血條(小飛碟生命值為10,有血條)。接下來(lái)判斷敵機(jī)的生命值,如果敵機(jī)生命值為0,則從敵機(jī)數(shù)組和精靈表單中刪除敵機(jī)精靈,播放爆炸動(dòng)畫和爆炸音效。

在私有分類中添加兩個(gè)方法,實(shí)現(xiàn)代碼如下(程序清單同上)。

// 播放爆炸動(dòng)畫

-(void) bombAnimate:(NSString*) name : (CGPoint) position;

// 游戲結(jié)束

-(void) gameOver:(NSString*) labelString;

bombAnimate: name:方法用于播放爆炸動(dòng)畫。實(shí)現(xiàn)代碼如下(程序清單同上)。

-(void) bombAnimate:(NSString*) name : (CGPoint) position {

NSString* bombName = [NSString stringWithFormat:@"%@0.png",name];

float delay = 0.08f;

CCSpriteBatchNode *batchNode = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];

CCSprite* blastSprite = [CCSprite spriteWithSpriteFrameName:bombName];

blastSprite.position = position;

// 獲得動(dòng)畫幀

CCAnimation* blastAnimation = [self getAnimationByName:name delay:delay animNum:4];

// 組合動(dòng)作:1.播放動(dòng)畫 2.刪除動(dòng)畫精靈對(duì)象

id action = [CCSequence actions: [CCAnimate actionWithAnimation:blastAnimation],

[CCCallBlock actionWithBlock:^() {

[batchNode removeChild:blastSprite cleanup:YES];

}],nil];

[blastSprite runAction:action];

[batchNode addChild:blastSprite z:4];

}

bombAnimate: name:方法接收傳進(jìn)來(lái)的爆炸效果名稱,獲取爆炸動(dòng)畫幀,先播放動(dòng)畫,動(dòng)畫播放完畢后刪除動(dòng)畫。

gameOver:方法用于游戲結(jié)束時(shí)清除精靈對(duì)象并提示游戲信息。實(shí)現(xiàn)代碼如下(程序清單同上)。

-(void) gameOver:(NSString*) labelString{

// 停止所有動(dòng)作

[self unscheduleUpdate];

// 游戲結(jié)束

CCMenuItemFont* gameItem = [CCMenuItemFont itemWithString:labelString

target:self selector:@selector(onRestartGame:)];

gameItem.position=ccp(screenWidth/2, screenHeight/2);

CCMenu* menu = [CCMenu menuWithItems:gameItem, nil];

menu.position = CGPointZero;

[self addChild:menu];

}

找到onEnter方法,在⑤部分代碼后初始化×××數(shù)組,實(shí)現(xiàn)代碼如下。

bulletArray = [[CCArray alloc] init];

修改update方法,實(shí)現(xiàn)代碼如下(程序清單同上)。

-(void) update:(ccTime)delta{

count++;

[self updateBackground:delta];

[self updateEnemySprite:delta];

[self removeEnemySprite:delta];

[self updateShooting:delta];

[self removeBulletSprite:delta];

self collisionDetection:delta];

}

再次編譯并運(yùn)行游戲,大量的敵機(jī)會(huì)隨機(jī)出現(xiàn),并向屏幕下方俯沖,控制玩家飛機(jī)發(fā)射×××,×××擊中敵機(jī)顯示爆炸效果。模擬器顯示效果如圖13.64所示。

瘋狂ios之瘋狂打飛機(jī)游戲(3)

13.14.9添加背景音樂(lè)

有了音效,有了爆炸效果,沒有背景音樂(lè)好像缺少點(diǎn)熱血澎湃的游戲感覺,讓我們馬上加入背景音樂(lè)吧。

找到onEnter方法,在游戲的主循環(huán)代碼之前添加背景音樂(lè)播放功能,實(shí)現(xiàn)代碼如下(程序清單同上)。

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"s3.wav" loop:YES];

[[SimpleAudioEngine sharedEngine] setBackgroundMusicVolume:0.5];

再次編譯并運(yùn)行游戲,開始游戲時(shí)就可以聽見令人熱血澎湃的背景音樂(lè)了。讀者可以按照13.13.2節(jié)的內(nèi)容為游戲增加聲音設(shè)置功能選項(xiàng),包括聲音開關(guān)、聲音大小調(diào)節(jié)等,這里不再贅述。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


本文題目:瘋狂ios之瘋狂打飛機(jī)游戲(3)-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/dgcsoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部