20121111

shiva3D 塔防大戰 part2

設定主角移動
設定黃忠標籤
設定黃忠變數
在一開始(onInit)即取得黃忠物件

滑鼠按下後呼叫轉換函數,並且將黃忠移動到對應的y軸

設定弓箭
將弓箭加入GameEditor使其可以動態呼叫
呼叫弓箭
建立弓箭移動AI(ArrowAI)
將弓箭移動AI套用至弓箭模型

設定肥肥
將肥肥模型(Enemy)放到GameEditor的模型作為動態物件
在MainAI加入新增敵人的函數CreateEnemy()
撰寫產生敵人的程式碼

設定敵人延遲時間變數(nDelay,預設為0)及敵人目前已在場景內數量(nCount,預設0)
設定自動產生敵人及自動判斷程式碼,並檢視是否有每兩秒出現一隻敵人

shiva3D 塔防大戰 part1

場景設定
建立專案

建立遊戲

匯入關卡背景貼圖



於AmbienceEditor設定背景貼圖

建立場景
調整攝影機(X:0,Y:0,Z:65)

主角設定
匯入黃忠貼圖(Hero.png)

建立模型→形體→平面體(XY平面,+Z軸為法向量),Hero


建立Hero模型材質(Hero_m,效果貼圖為Hero.png、建立動態燈光,自發光7f7f7f)



將黃忠移置場景內,並調整到原點

畫面設定
畫面尺寸調整為iPad橫向1024*768

調整攝影機位置(Z:6.5)

調整黃忠位置,(X:-2.8)

撰寫場景AI
建立主程式(MainAI)
將MainAI加入GameEditor主程式
新增onInit並撰寫設定當前場景程式

建立敵人(Enemy)與弓箭(Arrow)模型
撰寫操作程式
轉換2D的座標至3D的座標

20121104

shiva3D 坦克大戰 part3

坦克開火
1.設定bFire變數(布林,預設false)
2.新增onFilre事件
3.在onFire事件加入判斷開火狀態
4.在onKeyboardKeyDown(kKeyCode)裡加入開火使用按鍵判斷

5.在onKeyboardKeyUp(kKeyCode)裡加入開火按鍵放開判斷
6.匯入子彈包裝檔 (Bullet.ste)
7.設定場景砲管位置的標籤(Tank_fire_position_tag)

8.將子彈包裝檔設為動態物件,須先將子彈模組放入GameEditor內的模型
9.撰寫子彈的產生方式

10執行時按下空白鍵,查看是否子彈已上膛
BulletAI (子彈發射AI)
1.新增BulletAI作為子彈發射功能
2.於BulletAI內加入onEnterFrame事件
3.撰寫子彈發射程式碼
3.套用BulletAI至Bullet模組內


4.執行時發現子彈發射的角度有問題

5.調整子彈發射角度,並加入按鍵連續發射程式碼

動態物件(子彈)消除
1.設定牆壁感應器




2.幫子彈添加感應器
3.在BulletAI加入是見碰撞處理器onSensorCollisionBegin()
4.撰寫碰撞感應消除程式碼

5.執行時若子彈發射太快也會被消除

6.調整感應代碼

坦克履帶動畫
1.建立變數nPedrail,預設值為0
2.對坦克的履帶(Tank_pedrail)加入標籤(Tank_pedrail_tag)
2.於前進onForward()事件內加入履帶動畫

3.於後退onBack()事件內加入履帶動畫
計算子彈發射數量
1.新增HUD (Tank_HUD)
2.新增元件BulletNum(Z順序:128,框及背景為0,反鋸齒)

3.onInit()撰寫程式碼,將HUD加入畫面

4.加入nBulletNum變數,預設0
5.撰寫計算子彈發射數量的程式碼
6.執行畫面確認發射數量與按鍵數量相符

~坦克大戰遊戲課程結束~

你還在幫別人打造舒適圈?

 師不順路,不好為人師,談何容易.... 人總是在為自己的做法找"理由",找一個漂亮的包裝,找一個可以說服人的方式,找一個立足點....然而,這個為自己所做的一切,往往是一個自私的隱性表現,因為你要達到的就是"滿足"自己。 但要如何滿足自己...