用 Python 寫 3D 游戲,太贊了

vizard入門
1、加載人物、對(duì)象、背景
2、鴿子隨機(jī)漫步avatar = viz.addAvatar('xxx.cfg', pos=(0,0,0), euler=(0,0,0))viz.add('xxx.osgb',pos=(0,0,0), euler=(0,0,0))viz.addChild('xxx.obj',pos=(-4,0,7.5))
①利用????????????. ??????????????????()生成隨機(jī)位置,調(diào)用????????????. ????????????()實(shí)現(xiàn)鴿子漫步
②利用????????????. ???????????()生成隨機(jī)選擇,隨機(jī)更新鴿子的??????????狀態(tài)
③調(diào)用????????????. ????????????????()實(shí)現(xiàn)隨機(jī)時(shí)間的等待
④利用????????????. ????????????????()實(shí)現(xiàn)上述動(dòng)作序列
pigeon = viz.addAvatar('pigeon.cfg',pos=(2,0,5))random_walk = vizact.walkTo(pos=[vizact.randfloat(1.5,2.5),0,vizact.randfloat(4.5,5.5)])random_animation = vizact.method.state(vizact.choice([1,3],vizact.RANDOM))random_wait = vizact.waittime(vizact.randfloat(2.0,8.0))pigeon_idle = vizact.sequence( random_walk, random_animation, random_wait, viz.FOREVER)pigeon.runAction(pigeon_idle)
3、人物談話動(dòng)作
def PersonTalk():female = viz.addAvatar('vcc_female.cfg', pos=(1,0,8), euler=(-90,0,0))male = viz.addAvatar('vcc_male2.cfg', pos=(0,0,8), euler=(90,0,0))female.state(14)??male.state(4)
4、角色移動(dòng)
①通過??????. ??????????????????????????????() ? ??????????計(jì)算移動(dòng)速度
②初始化歐拉矩陣??1 = ??????. ????????????. ??????????(0,0,0)
③通過??????. ??????. ????????????()分析對(duì)應(yīng)鼠標(biāo)事件,根據(jù)人物朝向????????????. ????????????????()更 新??1平移變換矩陣
④通過????????????. ??????????????????????(??1. ??????????????????????())更新人物位置
⑤通過??????. ??????. ????????????()分析對(duì)應(yīng)鼠標(biāo)事件,設(shè)置對(duì)應(yīng)人物動(dòng)畫:
前進(jìn)、后退動(dòng)畫:????????????. ??????????(2)
左跨步動(dòng)畫:????????????. ??????????(12)
右跨步動(dòng)畫:????????????. ??????????(13)
人物靜止動(dòng)畫:????????????. ??????????(1)
def roleMove():m1 = viz.Matrix.euler(0,0,0)dm = viz.getFrameElapsed() * speedtemp=avatar.getEuler()[0]*math.pi/180if viz.key.isDown('w'):m1.preTrans([dm*math.sin(temp),0,dm*math.cos(temp)])avatar.state(2)elif viz.key.isDown('s'):m1.preTrans([-dm*math.sin(temp),0,-dm*math.cos(temp)])avatar.state(2)elif viz.key.isDown('a'):m1.preTrans([-dm*0.3*math.cos(temp),0,dm*0.3*math.sin(temp)])avatar.state(12)elif viz.key.isDown('d'):m1.preTrans([dm*0.3*math.cos(temp),0,-dm*0.3*math.sin(temp)])avatar.state(13)else:avatar.state(1)??avatar.setPosition(m1.getPosition(),?viz.REL_PARENT)
5、獲取鼠標(biāo)位移
通過回調(diào)函數(shù)callback獲取
def onMouseMove(e):global mp_x,mp_ymp_x=e.dxmp_y=e.dyviz.callback(viz.MOUSE_MOVE_EVENT,onMouseMove)
基于vizard實(shí)現(xiàn)的效果:
1.時(shí)鐘顯示當(dāng)前系統(tǒng)時(shí)間
2.兩個(gè)談話小人(帶動(dòng)畫)
3.第三人稱漫游(帶動(dòng)畫)
- 前進(jìn)(鍵盤 W 鍵)
- 后退(鍵盤 S 鍵)
- 左跨步(鍵盤 A 鍵)
- 右跨步(鍵盤 D 鍵)
- 旋轉(zhuǎn)(使用鼠標(biāo)左右平移)
- 上仰(使用鼠標(biāo)上下平移)
4.其他三維物體/背景
鴿子做自由漫步
花瓶擺件
天空背景
草地背景

