粘貼到CSDN格式沒調,想看格式好的點下面
https://happysoul.github.io/nes/nesdoug/
我要做的第一件事是標題屏幕。這部分快速搞定,畢竟只是爲了展示一下。我用 NES screen tool創建了一個圖,並保存壓縮成 RLE.h文件 “title.h”。標題只是等待用戶按下 START按鈕,循環顏色讓其顯示不那麼無聊。
temp1 = get_frame_count();
temp1 = (temp1 >> 3) & 3;
pal_col(3,title_color_rotate[temp1]);
title_color_rotate 是4種配色數組。
我不想一次創建一個room,所以我做了一個很長的 Tiled文件,並導出csv,然後用 CSV2C_BIG.py將其轉變爲數組。
(我原本在底部自動生成一個指針數組,但我最終沒用他,刪了以後做了一個更大的指針數組,包含了所有的關卡)
const unsigned char * const Levels_list[]={
Level1_0,Level1_1,Level1_2,Level1_3,Level1_4,Level1_5,Level1_6,Level1_7,
Level2_0,Level2_1,Level2_2,Level2_3,Level2_4,Level2_5,Level2_6,Level2_7,
Level3_0,Level3_1,Level3_2,Level3_3,Level3_4,Level3_5,Level3_6,Level3_7
};
我使用了2中敵人和2中硬幣。
然後我在其上創建了一個包含所有sprite精靈對象的圖片(背景透明),在Tiled中將其作爲單獨的tileset導入,添加了另一個層放置Sprite精靈對象。我將敵人放在第二層(作爲圖塊),並導出另一個csv文件,然後我寫了另一個.py文件 “CSV2C_SP.py” 來將他們轉爲數組。
我最終沒有向這樣使用。混合了硬幣和敵人,我希望他們在不同的數組中。因此我將不同類型的對象剪切並粘貼到了2個不同的數組中。這時候.py文件的用途體現出來了。
這些數組可能需要再稍微編輯下
我做了2中敵人,怪物也會跟牆壁發生碰撞。最初我想用跟主角一樣的代碼,但我覺得這樣的檢查方式會太慢,所以我寫了一個更簡單的代碼。
bg_collision_fast() 這個只會檢查2個點,而不是4個點。
寫的怪物的AI不是很好,他們只會X軸移動,Y方向不會動,如果放在一個平面上他們會像鬼一樣飄在上面,以後我可能會優化一下這個邏輯。
另外一個敵人只是來回跳。下火時候會檢查下面的地面,停到地面上,使用和主角相同的判斷代碼。
bg_check_low();
第二種硬幣只是一種結束標記。我想我們可以添加一些到達關卡最後時候的音樂,不過目前只會讓屏幕淡化成黑色。
添加不少模式,狀態了。標題,遊戲,暫停,結束,切換(一關結束到另一關)。
調試效果也挺好。我開始還擔心跑過頭了。
我用了gray_line() 來檢查我們在屏幕上的距離。
我不想讓敵人AI太複雜,也不想在一個屏幕上放置太多物體,這樣會讓我們的遊戲變慢,所以我們需要測試,看我們的屏幕能夠放多少個敵人。結果大概是7-8個,這比我想的要好很多。
最後,我將硬幣數量作爲精靈放到左上角顯示,我沒有放的太高,因爲一些老電視可能看不到,距離頂端16個像素剛好。
最後差點忘了精靈shuffing代碼。
重點!!sprite精靈頁面中,每條水平線只能有8個精靈。我們必須在OAM緩衝區內對每個對象的位置做修改,這樣就不會讓敵人完全消失。
最簡單的辦法是每幀修改初始位置。而不是sprid=0,你可能會用sprid=rand8()*4,或者類似的方法,但這不是很好的方法。
我決定每幀以不同的順序瀏覽敵人列表(並在精靈繪圖代碼的頂部保持sprid = 0)。
const unsigned char shuffle_array[]={
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,
0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15,
15,13,11,9,7,5,3,1,14,12,10,8,6,4,2,0
};
第一遍,他會向前走0-15,然後是返回來。。。
我媽們要保證同一水平線上沒有太多硬幣。
我們的遊戲有3個關卡,每關8屏。本來還可以更大一點。每個關卡需要2000個字節。我們剩下大概16000個字節,所以我們還能增加7-8個關卡,總共10個關卡。如果我們想要更多關卡,就要考慮不同的mapper或者使用壓縮算法。
https://github.com/nesdoug/26_Full_Game/blob/master/full_game.c
https://github.com/nesdoug/26_Full_Game
差不多就這些了,去搞遊戲吧。。。