在很多2d遊戲中,都會涉及到角色移動,跳躍等操作,最典型的就是橫板闖關遊戲。例如經典的魂斗羅、三國戰紀等。這兩款遊戲在地圖移動和角色行走的方式中唯一的不同就是魂斗羅是沒有縱深的那種。
看似簡單,其實涉及了地圖,攝像機移動,數學和物理的一些內容。
本片內容先介紹一下移動元件的定義,稍後的文章會一點點講解地圖、自定義攝像機等,最終應用到遊戲中,做成乙個完整的demo。
首先列舉一下移動中都需要支援哪些功能
上下移動: 對於不可以上下移動的遊戲來說,z方向的速度始終為0即可。
左右移動:x座標的變化。
支援兩個方向同時移動:當同時按下前上鍵時應該可以向左前方移動。
移動速度定義:當某個方向有速度時,才會向某個方向移動,站立狀態下,所有方向速度均為0.
彈力:這個是為了模擬球的落地彈起,實現並不要求那麼嚴格的。
摩擦力: 這個是為了模擬逐漸停止的效果。實現並不要求那麼嚴格。
是否受重力影響: 對於一些不受重力影響的物理,可以不做重力計算
是否啟用: 只有啟用以後才會進行移動計算。
在遊戲地圖中的座標:記錄角色當前在地圖中的位置。
import from "../../cfw/tools/define";
import physicalmanager from "./physicalmanager";
const = cc._decorator;
@ccclass
export default class movesystem extends cc.component )
g: boolean = true;
@property()
enable: boolean = true;
@property()
speed: cc.vec3 = cc.v3(0, 0, 0)
// 彈力
@property()
elasticity: number = 0;
//摩擦力
@property()
frictional: number = 1;
@property()
jumphigh: number = 350;
//左右移動方向
protected movexdir: dir = dir.right;
//上下移動方向
protected movezdir: dir = dir.up;
//角色在地圖中的位置
protected position: cc.vec3 = cc.v3(0, 0, 0)
start()
}ondestroy()
}setenable(f: boolean) else
}isenable()
setmovexdir(d: dir)
getmovexdir()
setmovezdir(d: dir)
getmovezdir()
getfrictional()
setgrictional(n: number)
setelasticity(n: number)
getelasticity()
isg()
setg(f: boolean)
getjumphigh()
setjumphight(h: number)
addjumphigh(h: number)
isjumping()
setx(x: number)
sety(y: number)
getz()
setz(z: number)
getx()
gety()
getspeedx()
setspeedx(s: number)
setspeedy(spy: number)
getspeedy()
setspeedz(z: number)
getspeedz()
}
flash遊戲中控制角色慣性移動
首先做好角色的mc,然後在mc上編寫如下指令碼 偵聽鍵盤,如果沒有按鍵則變數kpress的值為 沒有按鍵 onclipevent load key.addlistener mylistener 設定初始值 onclipevent load 左邊界 if x 30 下邊界 if y 370 上邊界 i...
專案2 遊戲中的角色(1)
all right reserved.檔名稱 test.cpp 作 者 韓雙志 完成日期 2016年3月30日 版本號 v1.0 問題描述 補充完整需要的成員函式,使角色能一定的規則行動或改變狀態。輸入描述 無 輸出描述 角色的歇涼和狀態 include include using namespac...
專案15 遊戲中的角色類(2)
檔名稱 main.cpp 作 者 秦超 完成日期 2016年3月26日 版 本 號 v1.0 問題描述 基於問題 1 設計析構函式和建構函式 include using namespace std class role role void setrole string n,int b void sh...