用C語言開發NES遊戲(CC65)14、遊戲平臺

粘貼到CSDN格式沒調,想看格式好的點下面

https://happysoul.github.io/nes/nesdoug/

我們要做的是向右滾動顯示。

遊戲吸引人的地方在哪裏呢?重力。

我們需要16bit來記錄 X和Y 的速度和位置。低字節表示像素的位置。

我使用了有符號的 int值 (signed int 他的長度是2)

 

重力,每一幀給Y加一點速度,但不要太快,否則我們可能會落到地板以下,所以我們有一個最大的加速度。

 

我在.h文件中定義了這些物理變量。這樣微調操作也會比較容易,這些都是 16bit的數值,低字節是子像素。最大加速度是2.25

 

 


 

 

#define ACCEL 0x20

#define GRAVITY 0x50

#define MAX_SPEED 0x240

#define JUMP_VEL -0x600

#define MAX_RIGHT 0xb000

 

 

 

我不希望所有的平臺都是磚頭,四面碰壁。我希望的是可以跳過平臺,然後落在平臺上,所以我定義了一個碰撞數組,並且定義了每個元數據的行爲方式。

 

 


 

 

#define COL_DOWN 0x80

#define COL_ALL 0x40

 

const unsigned char is_solid[]={

0,

COL_DOWN,

COL_ALL+COL_DOWN,

COL_DOWN,

COL_DOWN,

COL_DOWN,

0,

0,

0,

0,

0,

0

};

 

 

 

我不得不手動編輯這些,有點尷尬。。。

 

背景碰撞代碼解析碰撞位,並根據方向傳送碰撞信號。如果Y速度爲負值(往上跳),則忽略腳部的碰撞

 

 


 

 

if(BoxGuy1.vel_y > 0) {

BoxGuy1.vel_y = 0;

}

 

 

 

And only sets feet collisions if the feet are just barely inside the block.

(看不懂,自求多福了)

 

 


 

 

if((temp3 & 0x0f) > 3) collision_D = 0;

 

 

 

這就是爲什麼Y的速度不能大於每幀3個像素的原因。如果更快的速度,就會錯過碰撞直接傳過去了。

 

我用NES Screen Tool製作了一些新的圖塊,截圖保存爲metatiles.png,作爲tileset導入到 Tiled Map地圖編輯器中。

製作一些關卡,導出成csv文件,然後轉換爲C的數組,導入到代碼中。

 

 

現在看起來像是個遊戲了

 

https://github.com/nesdoug/17_Platformer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章