首先得從我的專案構想靈感說起
但是有鑑於已經有發過一篇構想
所以在此直接引用!!
http://hwshow-vgc.blogspot.tw/2012/06/blog-post.html
最後的DEMO作品其實跟我的理想還有點差距
這算是我目前設計的最完整的一支程式
所以在程式的完整度上比較執著
但是反而使遊戲性上的完整度較低了
以下是我這次設計的互動視訊遊戲
根據了上面引用的構想設計的
原本的理想是所有的觸碰點都同時觸控才進入下一關
但是遊戲的規則稍有改變
這是最後完成品的遊戲規則
1.不必同時觸碰,但同樣必須所有觸碰點皆觸碰過也可以通關
2.遊戲有時間限制,所以同時將所有觸碰點同時觸碰可以加速通關速度
3.關卡無上限,但是通關數越多分數越高
所以結合以上3種規則
時間內通關數越多分數自然越高
但是最後DEMO的作品還少了時間的限制
這是DEMO時的遊戲介面
龍珠為觸碰點
但是DEMO時發現龍珠的距離還不夠遠
達不到我所想的觸碰所有出現的龍珠需要誇張的大動作的效果
上面的兩張圖
第一張是玩家的站立準備位置
第二張是所有可能出現的觸碰點位置
接著這張圖要介紹的
是為了DEMO所顯示的所有偵測畫面
由左到右分別是Background,Difference,BinaryDifference,BinaryDifference-Block
接下來要說的是這次設計所碰到的問題
第一點:
在同時出現的觸碰點中,分別觸碰沒有問題
但是在同時觸碰的情況下
只有編號最前面的一個會被觸碰
原因是我每次回呼時就會重置一次觸碰點boolin變數的true or false
解決的辦法是當所有出現的觸碰點接被觸碰,也就是false
才會重置觸碰點
第二點:
第一點的問題解決後能夠正常的進行遊戲
但是所有觸碰點接觸碰也就是通關後
畫面會立刻重置造成下一關的準備時間不足
造成在觸碰動作還未收回前已經進入下一關
直接觸碰到下一關的觸碰點
而在為了解決這個問題的部分
我嘗試了幾種方法
Sleep( milisecond );
其中
milisecond = 1000 為1秒
milisecond = 2000 為2秒
依此類推...
這是讓程式休息 milisecond 時間後才繼續直行
但是這個方法會讓整個程式停頓而不是我要的等待效果
接下來我使用另一種方法
if( iTimeBefore != 0 )
iTimeBefore = clock();
iTimeAfter = clock();
while(iTimeAfter - iTimeBefore != milisecond )
但是發現這段程式的雖然寫法不同
但是跟Sleep的結果一模一樣
最後是我最終的解決方法
if( iTimeBefore != 0 )
iTimeBefore = clock();
iTimeAfter = clock();
if( iTimeAfter - iTimeBefore != milisecond )
{
重置遊戲畫面( 進入下一關 );
iTimeBefore = 0;
}
這樣的話程式不但不會停頓
而且還會在等待 milisecond 後才進入下一關
讓玩家有機會收回動作後
等待下一關的觸碰點出現
最後就是大家在成果展上看到的實際DEMO
在這門課上其實真的學到很多遊戲設計上實用的經驗
雖然過程中常常讓我有很累很疲憊
甚至有不想繼續修課的想法
但是做出來的成果讓我覺得這學期修這門課很值得
沒有留言:
張貼留言