這篇是介紹遊戲內碰撞的寫法

 

1. Collisions: 在object可以添加Collision Event
然後再選擇碰撞的object, Action內的tab main1
可以選擇Destroy Instance消除目標sprite
或是用code寫Destroy Instance

Bouncing The Ball: tab Move內有Bounce action可以設定反彈
而Move Free action可以設定移動方向
random_range(45, 135)代表移動的角度從45到135度
speed可以設定速度
或是用code寫
//CREATE EVENT
direction = random_range(45, 135);
speed = 8;

//COLLISION EVENT
move_bounce_all(false);

而在測試模式時的random變數總是固定的
這是官方特意設計方便測試用的
如果想改變這現象則需使用randomize() 來解決

01.png

 

2. Scores: tab Score內有Set Score action
可以用來設定分數, 分數是一個 global scope variable
new score:代表新的分數
Relative勾選則是會參考之前的數字
或是用code寫
score +- 10;
意思是說所有的instant都是共用同一個變數

Drawing the score: Draw GUI Event可以用來在介面上畫圖
tab score內 Draw Score 可以繪製分數
其中
x: 代表畫的x軸位置
y: 畫的y軸位置
caption: 代表初始顯示的字

也可以用code寫
draw_text(240, 0, "Score: " + string(score));

02.png

 

3. 問題集
Q1: 如果在螢幕上的任意地方劃一個sprite, 是否可以偵測他的碰撞?
A1: 否, 需要實體化它, 並設定碰撞mask以及event.

Q2: 為什麼我們不用精準的碰撞來確定碰撞事件?
A2: 因為在遊戲中設定精準碰撞的效率是很低弱的, 所以沒必要特別處理

Q3: 為什麼在測試開始時要呼叫randomize?
A3: 因為測試時的亂數是固定的, 所以要符合真實狀況需要呼叫randomize

Q4: 變數score的類型是?
A4: global scope, 代表所有的instant都是共用同一個變數.

Q5: 為甚麼draw GUI事件和其他的draw事件不同?
A5: draw GUI會在所有其他的draw事件畫完後才開始執行,
就像是獨立的一層, 並且總是出現在畫面的最上方.

03.png  

arrow
arrow
    文章標籤
    GameMaker Collisions
    全站熱搜

    RX1226 發表在 痞客邦 留言(0) 人氣()