一個 2D 橫版像素遊戲的製作流程是怎樣的?
題主是一個像素遊戲愛好者,有意製作一部2d橫版像素遊戲,準備登陸iOS,大概就像像莫莫多拉,洞穴探險,泰拉瑞亞,這樣的橫版2d像素遊戲,一般是用的什麼遊戲引擎製作?又用的什麼繪圖工具和動畫製作工具和用什麼編程語言好?請大神們多多指導,感謝。
作為一個像素風格的愛好者。
分享一下自己的經驗吧。
一、像素遊戲使用的引擎
先介紹題主感興趣的這些作品使用的引擎吧。
StardewVally 星露穀物語
由呵呵魚發行。
開發者是ConcernedAPE
根據開發者的答疑,遊戲使用的是C# XNA。
開發者本人在Reddit上的答疑鏈接
ConcernedAPE的輕博客鏈接
Terraria也同樣是使用C# XNA
程序是Andrew Spinks
可以參考GIT上泰拉瑞亞代碼 csnxs/Terraria
StarBound我就不多贅述了。
OwlBoy
這款遊戲也是題主想要做的橫版2D類型。
同樣使用C# XNA開發
下面介紹的這些作品都是使用GameMakerStudio開發的
HyperLightDrifter
使用GameMakerStudio開發
這款遊戲在steam 以及 PlayStation上均有上架
開發者的tumblr鏈接
undertale
IGN滿分作品
作者是 Toby Fox
使用GameMakerStudio開發
個人覺得不好玩 T_T
downwell
作者是 Moppin
使用GameMakerStudio開發
http://downwellgame.com/
另外推薦觀看《Branching Paths》這個紀錄片。
相對於《獨立遊戲大電影》,《Branching Paths》的知名度沒有那麼高,但是對於從業者來說絕對值得一看。
影片鏈接
NintendoSwitch以及任天堂其他主機上的一些像素遊戲,我不是很清楚,現在懶得去查。
Octopath Traveler
開發商SquareEnix
使用的是虛幻4引擎 (開發團隊是過去的勇氣默示錄開發團隊)
這款遊戲應該會在NS上首發,體驗版很驚艷。
下面著重介紹一下國產的像素遊戲。
如果題主有心的話,可以直接聯繫上開發者。
CatchMe
作者是 @玫瑰狗 @緋色de弦月
使用的是UNITY引擎
Steam鏈接
元氣騎士
作者是 涼屋遊戲 @一張鈔票
使用的是Unity引擎
TapTap鏈接
鍛冶屋英雄譚
作者是 @拚命玩三郎
引擎未知(希望可以告知補充 T_T)
TapTap鏈接
武器店物語
作者是 @timchen
使用的是UNITY引擎
Steam鏈接
To The Moon
作者是 高瞰(加拿大華人)
使用的是rpgmaker
TapTap鏈接
當然還有很多國人開發的像素遊戲,如有忽略還請見諒。
引擎介紹用了很多篇幅,主要是因為這一部分確實很重要。
建議題主根據自己的能力選擇合適的引擎。
個人推薦使用UNITY引擎,其次推薦GameMakerStudio。
我自己在用的就是UNITY引擎。
我在開發中的小遊戲
二、像素遊戲開發經驗
繪圖工具的話,我使用的是PhotoShop
其他工具的話推薦Aseprite
介紹一些PS像素資源處理的基礎知識吧。
開始所有工作之前,首選項里把圖像插值改為「鄰近」,標尺改為「像素」,文字改為「點」。
在放大像素資源的時候記得使用「鄰近」
效果示意
不使用鄰近插值放大會導致資源「糊"掉
PS資源導出
動作的每一幀都製作完畢後,使用PS自帶的腳本就可以快速導出了。
點擊【文件】-&>【腳本】-&>【將圖層導出到文件】
記得修改資源的文件名格式,勾選上透明區域。(根據自己需求)
這樣就可以把動作的每一幀都導出了。
不過這樣導出的文件名字里會有 「_xxxx」的無用字元,如果手動一個一個刪去就太麻煩了。
這裡給大家提供一個PYTHON腳本。(這裡要感謝我們組的程序同學)
import sys
import os
import re
png_file = re.compile(".*d{4}_.*.png")
png_file2 = re.compile(".*d{4}[a-zA-Z]_.*.png")
png_file3 = re.compile("d{4}_")
png_file4 = re.compile("d{4}[a-zA-Z]_")
files = os.listdir(".")
for filename in files:
if png_file.match(filename):
newFilename = re.sub(png_file3, "", filename)
if png_file2.match(newFilename):
newFilename = re.sub(png_file4, "", newFilename)
os.rename(filename, newFilename)
print "rename", filename, "-&>", newFilename
使用這個腳本就可以把文件名中的 "_xxxx"去除了。
字體相關
上上圖中的字體是使用宋體12點
其他像素字體的話推薦
不過一般宋體就夠用了,實在不行可以自己點。
像素畫教程
推薦看這位大神的輕博客(需要科學上網)
UNITY使用相關
Unity資源導入後 記得勾選 point
Point對應 鄰近插值
Bilinear對應 兩次立方
左側資源FilterMode為Point
右側資源FilterMode為Bilinear
音效相關
一般來說開發像素遊戲的話,一般都會配上8bit音效。
在這裡就加上一些8bit音效的小知識吧。
在開發初期一般都需要臨時的音效資源。
這部分音效資源可以在魔王魂找到完全免費的音效資源
魔王魂網站鏈接
當然如果你想自己製作音效,那當然更好。
FamiTracker 專門製作NES 8BIT音效,這個軟體完全免費。
FamiTracker
SFX MIXER 專業製作音效
SFX MIXER網頁鏈接
YMCK是日本一個8BIT音樂創作團隊,他們有免費提供 Magical 8bit Plug 插件
YMCK鏈接
其他的還有
Bfxr. Make sound effects for your games.
Best Free Bitcrusher VST/AU Plugins!
https://8bitmixtape.github.io/
有一些比較細或者深入的知識我沒有放在文章裡面。
如果還有別的問題也可以留言回復或者私信我,我盡量解答。
有想從事像素遊戲開發的美術、音效、程序、策劃同學歡迎私信聯繫我!!
有想從事像素遊戲開發的美術、音效、程序、策劃同學歡迎私信聯繫我!!
有想從事像素遊戲開發的美術、音效、程序、策劃同學歡迎私信聯繫我!!
例行附圖
補充一些我喜歡的像素藝術吧。
希望能有更多的人感受到像素風格的魅力
最後,歡迎關注我的專欄。
十八的遊戲開發筆記
遊戲策劃眼中的陰陽師
遊戲是什麼?這個問題真的很重要嗎?
呃..我是一個遊戲專業的大四學生...做了三年像素遊戲...全都是像素遊戲....只做過像素遊戲...而且手裡正在做的畢設也是像素遊戲...
我也很無奈啊...我是一個程序....跟我長期合作的美術...雖然很屌...但只愛像素...情有獨鍾...如痴如醉...但是 像素 真的 很棒!!!很有魅力!!!
遊戲引擎:Unity(沒用過別的 cocos您還是別考慮了 其他的引擎教學資源也少)
裡面需要注意的問題:
1)像素圖片的導入,FilterMode要選擇Point,不然圖片在場景里會糊。
2)像素風其實分為兩種
我的美術堅持認為retro style才是真·像素。推薦你看一篇文章..我這裡沒翻牆軟體,你可以關注一下這個博主,搜一下這篇文章。這個博主日常更新一切與像素相關的藝術。
unity裡面怎麼實現這種效果,參見一下我之前提的一個問題。
unity 2d如何才能做到真·像素旋轉?圖片邊緣的鋸齒大小怎麼才能調成和素材圖片的像素格一樣大?
下面有幾個答主的答案很有參考價值。
就是Pixel Perfect的問題... asset store裡面推薦兩個插件...
3)個人覺得像素特效最難做...一般都是美術畫序列幀,如果想做粒子特效的畫,審美很重要。推薦steam裡面的Dead ceils 那個遊戲的像素特效就很棒。推薦一些像素特效插件:
4)畫像素的工具,跟我合作的美術一般都是用PS畫的..就是一個個像素格為單位畫的。一個獨立遊戲製作人師哥向我們推薦了下面這個軟體,風評很不錯。不是很建議直接把非像素的美術素材直接在相機上加個什麼像素濾鏡來達到所謂的像素風格...我認為這是作弊...
MagicaVoxel 推薦一個體素工具...簡單易用好上手...
5)大面積的像素可以用這個:Dan Fessler | Blog 適合畫背景。
6)角色的可以參考這個:http://makegames.tumblr.com/post/42648699708/pixel-art-tutorial
7)說一下關於像素的一些教程(請合理上網)
HD Index Painting in Photoshop (by Dan Fessler)
在PS中繪製高清索引圖
No Bullshit Pixel Art Tutorial (by Retronator)
絕不扯淡像素畫教程
Pixel Art Knowledge (by various Pixel Artists)
像素畫教程大合集
Pixel Art Tutorial (by Derek Yu)
Pixel Art Tutorial (by Cure)
Pixel Art Tutorial (by Android Arts)
Pixel Art Tutorials (by drbubu)
Pixel Art Tutorial (by Studio Purloux)
Pixel Art Academy (by Retronator)
Pixel Purism: Process vs Results (by Dan Fessler)
Pixelation Knowledge Repository (by Helm)
Pixel Art Tutorials (by finalbossblues)
像素藝術知識庫
6 Pixel Art Drawing Techniques as Video (by GDQuest)
像素畫六大技法視頻版
What the Heck is Pixel Art (by Pix3M)
像素畫到底是什麼
Pixel Art Process - or 8 steps to a polished result (by Cyangmou)
像素畫處理(8步美化像素畫)
Perfect Pixel Art with Specular and Bump Lighting in Unity (by Anton Kudin)
在 Unity 中運用鏡面光與凹凸貼圖創建完美像素畫
ISOmetric Pixel Art Cheat Sheet (by Dennis Busch)
等軸立體像素畫技法小抄
How To Pixel Art Tutorial as Video (by Christopher Yabsley)
如何繪製像素畫視頻版
Pyxel Edit Tutorial Mini Series as Video (by Christopher Yabsley)
像素畫編輯小教程視頻版
GIMP Pixel Art Tool Setup Tutorial as Video (by Retronator)
GIMP 像素工具設置教程視頻版
Run Cycle Tutorial (by Glauber Kotaki)
像素畫多幀循環教程
A Little Guide to Pixel Art (by Simon Hunter)
像素畫迷你指南
Secret Weapons and Tactics for Better Pixel Art (by 2D Will Never Die)
精進像素藝術的神器秘籍
8)steam上好多獨立的像素遊戲,enter the gungeon無論是玩法還是遊戲美術上都挺不錯的。steam上搜pixel一大堆,自己多參考別人的東西。至於程序部分,unity 2d教程網上有的是,像素遊戲畢竟也是2d的,學習方法都差不多。引擎給封裝好了很多東西...題主問用啥編程語言..其實不是很重要的...
9.5)Unity中提升像素字體清晰度 - 黑桃花 - 博客園 這是最近遇到的一個問題及解決方法,當然最好是用bitmap這種工具做自己的像素字體...
9)一個程序小白的unity 2D遊戲開發的反思與經驗 這是大三做的一款像素遊戲的經驗總結...現在看來沒什麼參考意義... 嗯...也是個橫版過關遊戲...符合題主的要求...裡面有宣傳小片的連接...以及..找個靠譜點的策劃...什麼遊戲的開發流程都是類似的...
10)像素遊戲真的很棒!如果可以,想一直做下去!
附上正在做的一個多人的像素遊戲...
有問題問吧..雖然我很渣...盡量解答...
這樣,我有一個大膽的想法。
我從今天(10月17號)開始,從零起步製作一個 2D 橫版像素遊戲。暫定為期一個月,中間的製作過程就更新在這個答案里。
過程中,如果有什麼比較好用的教程、資料,也一併更新於此。
一個月後,告訴你完整的「一個2D橫版像素遊戲的製作流程」。
(對了,使用的引擎是 Unity3D)
最終的成品,做到哪兒算哪——不要期待太高,但爭取能完整地過一遍基礎流程。
(其實對於一些有經驗的人來說,一周末的 Game Jam 就夠完成這個目標了。但我很久沒碰遊戲引擎,許多坑都得從頭踩起,所以放寬些時間吧。)
在那之前,就先保持著匿名。
2017年10月17日 02:14:30 開搞
呼,看了樓上的精緻回答有點虛。順便也感謝經驗分享!
不過我接著做我的……
剛才試著畫了個角色動圖。是不是主角?不知道。可能只是背景君吧。
嚴格來說並不算「像素」……雖然是用的PS里的鉛筆工具。隨手塗的太糙了。
打算是先湊合著準備一波資源,把重心放在開發過程上。
那,就醬先。
2017年10月17日 02:39:23
贊數漲的有點兒厲害啊……果然遊戲是熱門話題。
其實我不建議你們看到這麼一個吹大話的答案就先給點贊的。萬一我這是隨口立 Flag 你們不就贊錯人了嗎。
說回正題。
今天開始試著畫了一下場景圖。這個階段是最開心的啦,還沒開工,沒太多限制,可以隨便開腦洞設想做什麼樣的遊戲。邊畫邊能構思「誒這個可以這樣出來」、「這裡主角可以那樣」、「最後巴拉巴拉」——這種隨意放飛階段可以說是遊戲製作過程里最開心的事兒了!
至於實現過程嘛……哈哈哈其實是長期打磨的辛苦活,倒未必有多少歡樂的。
可以看到,之前畫的那個蠕動怪,暫時是設定成 BOSS 一類的角色。NPC 也說不定。
主角是左下角那個黑色的小球。加了呆毛,但感覺對動畫來說可能會有不小的工作量,之後也許會刪掉也說不定。
亮黃色個部件是用來給自己指示的,黃色矩形是主角的大小設定(40*40),橙色的是跳躍的高度(100+60),也就是二段跳最高跳到橙色的頂端,正好能跳上右邊平台1號。
嗯,我自己玩橫版遊戲很喜歡二段跳的,所以做的遊戲肯定也要有這個功能啦。
兩側那些線條是避免畫面太空曠而加的前景來著。之後應該會隨著鏡頭移動而一起晃動吧,增加景深。
今天想到的關於這個遊戲的「參考遊戲」,一個是《Wuppo》還有一個是《The End is Nigh》;後者我沒玩過,但是想試一下它一個關卡只包括在一個屏幕內 的思路;前者嘛……比起近戰攻擊,射擊戰鬥好像比較容易實現的樣子。
先說到這兒,接下來要想辦法在 Unity 里搭建出這個場景啦!
對了,說一個奇技淫巧。在 PS 里設定圖像差值為 鄰近,然後把圖片縮小几倍再放大回原尺寸,能有效增加「像素感」(其實就是鋸齒啦,哈哈)
昨天畫的那坨就做了這麼個操作,放大看還挺明顯的。不過這是我偷懶才只么乾的,正兒八經的藝術家還是應該手動點像素哈。
感謝 @十八 提供的情報!
2017年10月17日 22:57:01
剛才折騰了一下怎麼從 PS 里導出幀動畫,這裡也分享一下設置。
為了讓導出來的圖像素材正好是幀的數量,所以把所有幀的時間間隔設為 1 秒,然後把幀速率設為 1 FPS;如果想要導出透明底色的圖片,選擇 PNG 格式,右下角 Alpha 通道選擇「預先進行白色正片疊底」。
參考:ps 如何批量導齣動畫所有幀?
2017年10月17日 23:25:02
那,開始在 Unity 里捏小人兒了。經過一番自己夏姬八折騰,給角色加上了 Animation,抖起來很鬼畜。你看到的 GIF 效果是減速過的,遊戲里剛啟動出來是 60fps 的狂暴顫動效果。
好,那今晚先到這兒,明天繼續搭場景+捏小人兒~
2017年10月17日 23:59:56
沒忍住,接著調了點兒,現在可以從天而降了。
2017年10月17日 00:12:11
好久不見!我又來更新啦~咕咕了兩天不好意思嘿。
昨天在亞馬遜上買了兩本書,今天就到了。都是神往已久的遊戲設計方面的書籍。《遊戲設計藝術》和《遊戲設計夢工廠》,算上優惠平均下來每本只要60元噢。
說正題,今天試著實現了「子彈」的雛形。因為主角工程量會比較大,留到之後再做。先嘗試做出「子彈打在敵人身上,閃現紅光,敵人扣血,子彈消失」的功能吧。
然後目前完成的是……「創建超多子彈」,哈哈。
倒放是 GifCam 里實現的,並不是遊戲內效果。但是看起來很有意思,之後也想辦法用代碼實現這個功能吧ww
2017年10月20日 23:59:39
希望子彈是全方向的,所以做了這個功能。現在可以朝整個屏幕內隨意開火啦!
參考資料:[Unity C# Tutorial] : 360° Aiming in a 2D Platform.
2017年10月21日 14:07:05
咕咕咕……!
向組織彙報一下……
吹完牛的四個星期里,一個周末加班,兩個周末玩兒《刺客信條·起源》,最後一個周末玩兒《馬里奧·奧德賽》。
所以,我理解為啥一個做遊戲的前輩說他自己很少玩遊戲了。
一旦玩了別的好遊戲就很難抽出時間(和足夠的意志)去做自己的遊戲了啊!!
2017年11月20日 08:33:34
補充一個影響品質感的問題:Pixel Perfect
簡單來說,我們在遊戲中控制物體移動並不是按照像素為單位的,而是以浮點數為單位。
這會造成像素「抖動」,如果旋轉或縮放,還會造成崩壞的情況。
如果引擎使用Unity的話,這裡有插件幫助解決這個問題。
Asset Store
這個問題說起來比較抽象,自己看一看視頻比較容易明白。Youtube搜關鍵詞「unity pixel perfect」
提幾個關鍵字吧,屬於用的比較多的
tilemap : 一個開源的2D地圖編輯器
引擎:cocos2d-x 或者 unity,這兩個引擎都有插件支持tilemap
動畫工具:直接使用引擎內置的動畫編輯器,根據需要看是否使用2D avata
像素點陣畫的話,網上有很多工具,一搜一大把,實際使用起來應該區別不大
看這個Youtube頻道,2d橫版像素遊戲的製作流程及代碼編寫,你想知道的一切知識在這裡都有!
https://www.youtube.com/c/NatWeiss
他的twitter是:https://twitter.com/wizard_fu
這是他的個人網站,介紹cocos2dx遊戲開發的:
https://wizardfu.com/book/cocos2d-x/best-free-game-engine/
遊戲引擎可選Unity,現在應該是主流了。cocos什麼的都是過去式了。
主要難點還是在於pixel art,也就是像素畫。
別以為像素畫容易,其實我告訴你比3D建模還難!
這是一張mini dayz的角色動畫資源,角色是32*32像素,我也知道像素畫基本就是勾線,填色,加陰影高光幾個步驟,但是在如此低的解析度之下,如果用一兩個像素表現手,腳,身體,肌肉,高光等這實在是一門藝術,需要相當的經驗才能做得好。
我告訴你,你在中國等找到10個做3d建模很好的,不一定能找到一個pixel art能畫的很好的。
你也不要以為上圖這種3D建模很複雜,其實比繪製2D像素藝術簡單多了。因為精度高,細節可以慢慢調整,反正你操作的都是多邊形頂點,比操作像素容易多了。而且做動畫超容易,加上骨骼和綁定,比2d一幀一幀繪製簡單太多了。
3D建模比2D容易,這是我跟著教程學了十幾個小時用blender弄出的低模小人,你2D想十幾個小時出了可以看的東西?難!
所以很多遊戲都是3D建模好之後轉2D的,比如《帝國時代》、《盟軍敢死隊》及國內的很多2D網遊和手機遊戲,都是這麼弄的。
盟軍敢死隊畫面精細,這種都是先用3d建模渲染之後,才轉為2d畫面的。手繪這麼細膩累死,效果也不如3d渲染的完美。
一句話,像素畫不好弄!
我模仿minidayz風格練習畫的AK74U和MP5
像素畫不好弄,還有一個不好弄就是卡通風格的也不好弄,比如最代表性的皇家守衛軍:
這種都是用adobe flash一筆一筆畫出來的,都是藝術,沒有大量的研究就經驗很難繪製的完美。國內山寨的類似都是都是3D轉2D的,為什麼不直接手繪啊?畫不好啊大兄弟!如果你等繪製皇家守衛軍這種水平的卡通,月薪多少都不是問題啊!問題是中國你找出一個這樣的畫師都難。
kingdom rush骨龍的繪製過程,可以參考一下。
這家公司一旦失去這個畫師這個公司就完了,但是如果是3D建模繪圖就不一樣,任何高水平的3D建模師出來的作品差別都不會很大,可以互相代替問題不大。
=====
修改:
第一次得到贊同所以讓我來多安利一點東西吧!
(多圖預警)
Trello - 安排進程 Trello
就是一個安排進程的東西啦~每個卡片裡面可以放評論 附件 還有任務目標(下圖)
如果你有很多朋友一起做項目的話他們可以來評論喲~
卡片可以從一個列表裡直接拖拽到另一個列表 可以很輕鬆的安排整理自己的項目進程
還有一個給卡片貼上貼紙的功能 可能更容易分類(??)
如果你的一個朋友突然搞亂了你的項目你也可以看看日誌 就能知道是誰幹的啦
但是我沒有朋友所以對我沒什麼卵用
Bxfr - 為你的像素遊戲做點8-bit音效 Bfxr. Make sound effects for your games.
這個沒太多可說的Orz 就是各種調參數然後下載你做的音效 有個供下載的版本但是如果你想用網頁版也可以
Aseprite - 給你的像素遊戲畫素材 Aseprite
你可以在這個軟體里畫動畫,貼圖,總之是各種各樣的像素畫
很強大的軟體 如果你想做像素遊戲這是你的最佳選擇(大概吧)
Steam售價48¥
MagicaVoxel - 3d體素製作軟體 MagicaVoxel
跑題一下下
一個免費的3d像素製作軟體 沒太多可說的 不過渲染感覺很厲害
好像直接導出obj會有些錯誤...Unity的商店裡有專門的vox轉obj插件可以試試
Spacedesk - 用手機當第二個顯示器 spacedesk
沒啥可說的 電腦上下載他的程序後在手機上下載應用 打開後連到同一個wifi就可以用手機當第二個顯示器咯
最後再推薦一個團隊文件同步的軟體
Dropbox - 傳輸項目文件 https://www.dropbox.com/
(不知道國內能不能用)
如果你不知道這東西咋用 那我就給你講一講
首先 他會給你創建一個文件夾 但這不是個一般的文件夾!
打開它之後你會發現有一個文件...
文件圖標旁邊的小對勾代表已經同步到了Dropbox的伺服器
所以你可能會問 這不就是百度網盤嗎
...你的百度網盤有這種操作嗎?!
首先創建一個文件夾
右鍵文件夾 點擊共享
然後你就可以和別人同步使用所有的項目文件咯
當你的美工做完素材後 他們直接保存到那個文件夾 然後你的dropbox就會直接同步那個素材
當你想要使用的時候 直接從dropbox文件夾里拿出來就好啦
如果國內用不了的話
...
...? 聯想企業網盤官網-企業雲盤-私有網盤-聯想融合雲-市場佔有率NO.1
原文:
看到上面有人推薦youtube頻道 那我也推薦一個
HeartBeast ←這個小哥的頻道很贊!
他有很多的零基礎教程 比如gamemaker做一個rpg遊戲 或者做一個平台跳躍射擊遊戲 全都是零基礎就能學習的 而且還有很多零零散散的教程
據小哥說他已經做了11年的獨立遊戲...他的官網上還有自己的付費課程 感覺很贊(雖然沒看過)
他的官網
...最關鍵的是小哥聲音軟人超帥啊啊啊啊啊啊(最近的視頻沒有臉了傷心)
你甚至不需要學習編程啦
我之前的回答里,推薦了很多遊戲引擎,99%不需要編程,而且很可靠,大牛用它創作出來了很多商業上成功的遊戲。
吳一千:怎樣學會製作獨立遊戲?
關於像素畫,我推薦HearstBeast大神的像素畫教程(他還是一位資深gamemaker使用者,出版過一本書:Gamemaker language: An In-Depth Guide,有點貴),不過是需要付費的,自己斟酌一下。
但是在他的油管頻道上,相關教程都是免費的,就是需要英語好點。
還有重要的一點,如果只是模仿現有的遊戲思路做遊戲,很難成功的,而且看起來很容易做的像素遊戲,其背後的所需的知識是很多的,而且做遊戲時構思出來很容易,實現很難。
要避免三分鐘熱度。
從最簡單最基礎的開始,比如如何使用所選的遊戲引擎?如何控制人物行走?
不請自來。
國內第一款八分音符就是我寫的代碼,後來因為侵權下架了,噗嗤
看到你問的內容,建議買一本 Unity 5.X從入門到精通 看看,裡面有一章專門講2D的。
說到橫屏像素遊戲不得不提Gameboy
講一講Gameboy的遊戲說不定能幫到你
Nintendo GameBoy, 講直接點是一個 1989年發布的8-bit 攜帶型遊戲平台。
GameBoy是迄今為止最成功的手持視頻遊戲系統。
Nintendo 在發布Gameboy之前發布了一款叫Game Watch的產品
這塊產品只能玩內置遊戲,並不能更換遊戲卡片
後來Nintendo借鑒了Sony Walkman播放器更換磁帶理論,開發出了我們所熟知的可以更換遊戲卡片的Gameboy系列
這之後我們便進入了可更換卡片的橫屏像素遊戲時代
因為GameBoy採用了Z80 CPU定址空間有限,也就限制了它的遊戲模式。
加上GameBoy初代採用的160x144的Dot LCD屏幕和僅僅 8K Byte的Video RAM。
GameBoy上面只能做出像素遊戲
實際上GameBoy的遊戲編程主要是在響應按鈕和控制VRAM裡面的tiles and sprite
GameBoy在硬體層面提供了tiles和sprite的支持,這就是為什麼全世界的GameBoy遊戲都差不多是橫屏加像素的原因
GameBoy結構圖
在GameBoy的LCD部分,提供了Background控制也就是背景地圖,sprite控制也就是遊戲角色還要一個叫做Windows的控制Windows和Background類似,但是Windows不會在屏幕上滾動
以下是一個簡單的顯示並控制Sprite的彙編代碼。
; Hello Sprite No Interrupts1.0
; February 19, 2007
; John Harrison
; using sprites without interrupts
; Look at this sprite example first, then look at the example with interrupts
; An extension of Hello World, based mostly from GALP
INCLUDE "inc/gbhw.inc" ; standard hardware definitions from devrs.com
INCLUDE "inc/ibmpc1.inc" ; ASCII character set from devrs.com
INCLUDE "inc/sprite.inc" ; specific defs
; create variables
; LoByteVar xpos ; these are examples of how variables
; LoByteVar spry ; can be created. They are based on a
; LoByteVar sprx ; macro in hello-sprite.inc
SpriteAttr Sprite0 ; this is a structure of 4 variables.
;See hello-sprite.inc
; IRQs
SECTION "Vblank",HOME[$0040]
reti
SECTION "LCDC",HOME[$0048]
reti
SECTION "Timer_Overflow",HOME[$0050]
reti
SECTION "Serial",HOME[$0058]
reti
SECTION "p1thru4",HOME[$0060]
reti
; ****************************************************************************************
; boot loader jumps to here.
; ****************************************************************************************
SECTION "start",HOME[$0100]
nop
jp begin
; ****************************************************************************************
; ROM HEADER and ASCII character set
; ****************************************************************************************
; ROM header
ROM_HEADER ROM_NOMBC, ROM_SIZE_32KBYTE, RAM_SIZE_0KBYTE
INCLUDE "asm/memory.asm"
TileData:
chr_IBMPC1 1,8 ; LOAD ENTIRE CHARACTER SET
; ****************************************************************************************
; Main code Initialization:
; set the stack pointer, enable interrupts, set the palette, set the screen relative to the window
; copy the ASCII character table, clear the screen
; ****************************************************************************************
begin:
nop
di
ld sp, $ffff ; set the stack pointer to highest mem location + 1
; NEXT FOUR LINES FOR SETTING UP SPRITES *hs*
call initdma ; move routine to HRAM
init:
ld a, %11100100 ; Window palette colors, from darkest to lightest
ld [rBGP], a ; set background and window pallette
ldh [rOBP0],a ; set sprite pallette 0 (choose palette 0 or 1 when describing the sprite)
ldh [rOBP1],a ; set sprite pallette 1
ld a,0 ; SET SCREEN TO TO UPPER RIGHT HAND CORNER
ld [rSCX], a
ld [rSCY], a
call StopLCD ; YOU CAN NOT LOAD $8000 WITH LCD ON
ld hl, TileData
ld de, _VRAM ; $8000
ld bc, 8*256 ; the ASCII character set: 256 characters,
;each with 8 bytes of display data
call mem_CopyMono ; load tile data
; *hs* erase sprite table
ld a,0
ld hl,OAMDATALOC
ld bc,OAMDATALENGTH
call mem_Set
ld a, LCDCF_ON|LCDCF_BG8000|LCDCF_BG9800|LCDCF_BGON|LCDCF_OBJ8|LCDCF_OBJON ; *hs* see gbspec.txt lines 1525-1565 and gbhw.inc lines 70-86
ld [rLCDC], a
ld a, 32 ; ASCII FOR BLANK SPACE
ld hl, _SCRN0
ld bc, SCRN_VX_B * SCRN_VY_B
call mem_SetVRAM
; ****************************************************************************************
; Main code:
; Print a character string in the middle of the screen
; ****************************************************************************************
ld hl,Title
ld de, _SCRN0+(SCRN_VY_B*5) ;
ld bc, TitleEnd-Title
call mem_CopyVRAM
sprsetup:
PutSpriteYAddr Sprite0,0 ; set Sprite0 location to 0,0
PutSpriteXAddr Sprite0,0
ld a,1 ; ; ibmpc1.inc ASCII character 1 is happy face
ld [Sprite0TileNum],a ;sprite 1"s tile address
ld a,%00000000 ;set flags (see gbhw.inc lines 33-42)
ld [Sprite0Flags],a ;save flags
call DMACODELOC ;update sprite
MainLoop:
ld bc,SPEED
call simpleDelay
call GetKeys
push af
and PADF_RIGHT
call nz,right
pop af
push af
and PADF_LEFT
call nz,left
pop af
push af
and PADF_UP
call nz,up
pop af
push af
and PADF_DOWN
call nz,down
pop af
push af
and PADF_START
call nz,Yflip
pop af
call DMACODELOC ; update sprite
jr MainLoop
; ****************************************************************************************
; Prologue
; Wait patiently "til somebody kills you
; ****************************************************************************************
wait:
halt
nop
jr wait
; ****************************************************************************************
; hard-coded data
; ****************************************************************************************
Title:
DB "Move the sprite by "
DB "using the arrow keys "
DB "one at a time, or "
DB "in combination. "
DB " "
DB "Flip the sprite "
DB "vertically with the "
DB ""start" key. "
TitleEnd:
right:
GetSpriteXAddr Sprite0
cp SCRN_X-8 ; already on RHS of screen?
ret z
inc a
PutSpriteXAddr Sprite0,a
ret
left: GetSpriteXAddr Sprite0
cp 0 ; already on LHS of screen?
ret z
dec a
PutSpriteXAddr Sprite0,a
ret
up: GetSpriteYAddr Sprite0
cp 0 ; already at top of screen?
ret z
dec a
PutSpriteYAddr Sprite0,a
ret
down: GetSpriteYAddr Sprite0
cp SCRN_Y-8 ; already at bottom of screen?
ret z
inc a
PutSpriteYAddr Sprite0,a
ret
Yflip: ld a,[Sprite0Flags]
xor OAMF_YFLIP ; toggle flip of sprite vertically
ld [Sprite0Flags],a
ret
simpleDelay:
dec bc
ld a,b
or c
jr nz, simpleDelay
ret
; GetKeys: adapted from APOCNOW.ASM and gbspec.txt
GetKeys: ;gets keypress
ld a,P1F_5 ; set bit 5
ld [rP1],a ; select P14 by setting it low. See gbspec.txt lines 1019-1095
ld a,[rP1]
ld a,[rP1] ; wait a few cycles
cpl ; complement A. "You are a very very nice Accumulator..."
and $0f ; look at only the first 4 bits
swap a ; move bits 3-0 into 7-4
ld b,a ; and store in b
ld a,P1F_4 ; select P15
ld [rP1],a
ld a,[rP1]
ld a,[rP1]
ld a,[rP1]
ld a,[rP1]
ld a,[rP1]
ld a,[rP1] ; wait for the bouncing to stop
cpl ; as before, complement...
and $0f ; and look only for the last 4 bits
or b ; combine with the previous result
ret ; do we need to reset joypad? (gbspec line 1082)
; *hs* START
initdma:
ld de, DMACODELOC
ld hl, dmacode
ld bc, dmaend-dmacode
call mem_CopyVRAM ; copy when VRAM is available
ret
dmacode:
push af
ld a, OAMDATALOCBANK ; bank where OAM DATA is stored
ldh [rDMA], a ; Start DMA
ld a, $28 ; 160ns
dma_wait:
dec a
jr nz, dma_wait
pop af
ret
dmaend:
; *hs* END
; ****************************************************************************************
; StopLCD:
; turn off LCD if it is on
; and wait until the LCD is off
; ****************************************************************************************
StopLCD:
ld a,[rLCDC]
rlca ; Put the high bit of LCDC into the Carry flag
ret nc ; Screen is off already. Exit.
; Loop until we are in VBlank
.wait:
ld a,[rLY]
cp 145 ; Is display on scan line 145 yet?
jr nz,.wait ; no, keep waiting
; Turn off the LCD
ld a,[rLCDC]
res 7,a ; Reset bit 7 of LCDC
ld [rLCDC],a
ret
如果你想開發一款GameBoy遊戲
以下鏈接會給你幫助:
ECE238Spr08/software - CRATEL Wiki
ECE238Spr08 - CRATEL Wiki
rednex/rgbds
Learning Z80 Assembly: Gameboy! (Part 1)
Gameboy Dev
GBDK Developers - Page 1
http://gbdk-developers.com
2D本身就比較煩瑣,像素要達到精美更麻煩,對美術人員要求必較高。
像素畫 你以為容易嗎?如果有繪畫基礎的話還好,不然還不如搞3轉2
工具么,主流一些的,unity或者gms。
繪圖,動畫用ps或asprite,日本的clip studio也還行。
語言就用引擎所支持的。好的像素美術動畫 = 閉上嘴巴+大量練習+巨量欣賞大佬作品+美術天賦
好的像素美術動畫 ≠ 到處詢問怎麼做
為什麼看日系和有的教程能難受死我,學unity學不了3dmax學不了什麼也學不了,動不動就開車動不動就猥瑣莫名其妙,我是個女的,找了很多地方簡直精神迫害,現在都找不到一個好的學習方式,還影響生活
說我有病吧攻擊我吧,反正噁心影響我的我不覺得少推薦閱讀:
※做獨立遊戲人有多辛苦?
※遊戲有哪些敘事手段?
※PS4 平台上有哪些好玩的本地多人遊戲 ?
※如何評價鎚子科技所推出的獨立遊戲扶植計劃?