刚踏入黑森林的第一步,就吹来一股寒风。
「究竟,这是座什麽样的森林呢?」
「不管了,我想成为第一个站上山顶的人!」山姆喃喃自语地说。
PS. 这里是开发 iOS 手机游戏的系列文,如果还没看过之前
剧情文章的朋友,欢迎先点这边回顾唷!
这次的游戏想做像素风格,让游戏有点怀旧的味道!
笔者选用这款「八位元画家」APP,作画,使用 16x16 的画布尺寸,并汇出成 256x256 px 的图片
觉得好用的功能:
操作画面:
来源:八位元画家
依据企划书定的墙壁种类,我们准备以下素材:
其中白色文字的是真实的墙壁,黄色文字是假的墙壁 (能隐身的树)
先写墙壁的对应表,将字元及代表的图片档名定义好:
let wallMapping: [Character: String] = [
"a": "wall-line-1",
"b": "wall-line-2",
"c": "wall-line-3",
"d": "wall-line-4",
"e": "wall-line-5",
"f": "wall-line-6",
"g": "wall-corner-1",
"h": "wall-corner-2",
"i": "wall-corner-3",
"j": "wall-corner-4",
"k": "wall-corner-5",
"l": "wall-corner-6",
"m": "wall-corner-7",
"n": "wall-corner-8",
"o": "wall-intersection-1",
"p": "wall-intersection-2",
"q": "wall-end-1",
"r": "wall-end-2",
"s": "wall-end-3",
"t": "wall-end-4",
"u": "wall-end-5",
"v": "wall-end-6",
"w": "lake-1",
"x": "lake-2",
"y": "lake-3",
"z": "lake-4",
"1": "tree-green",
"2": "leaf",
"3": "wood",
"#": "tree-purple"
]
参考前一天定义的 map 阵列,将墙壁 "w" 调整为想显示的图片的对应字元,命名为另一个绘图的阵列 mapDraw
。
目前我们有两个地图阵列:
let mapDraw = [
"ccccccccpccccccci",
" .....e*......b",
"aam.1ji.s.11.zy.b",
" d.3gh....1.wx.b",
"jcl.....ji.1....b",
"d*...11.gh...rt.b",
"d.11.nm....2....b",
"d..1.kl.22.1.naah",
"ot... .b ",
"d..1.jcu vci.b ",
"d.12.d b.kccc",
"d+...gaaaaah. ",
"gaam. .11.n",
" d.rt.1#.q....b",
" d....21.e.ji.b",
"cccl.ji....e.gh.b",
" .gh.13.s....b",
"aaam....1....21.b",
" d...23.rt.1..b",
" d.1.........3b",
"jccl.1.rft.3.1.1b",
"d*.............*b",
"gaaaaaaaaaaaaaaah",
]
调整前一天绘制迷宫的方法:
map
改为 mapDraw
,改从绘图的阵列取得资讯wallMapping.keys
取得墙壁对应表的所有 keywhere
来侦测当前的字元是否有被涵盖在 mapKeys
中。如果有则使用 wallMapping 来取得对应的图片名称func drawMap() {
for i in 0..<gridYCount {
let mapRowArr = Array(mapDraw[i]);
for j in 0..<gridXCount {
let mapKeys = wallMapping.keys
switch mapRowArr[j] {
case _ where mapKeys.contains(mapRowArr[j]):
let spriteItem = SKSpriteNode(imageNamed: wallMapping[mapRowArr[j]]!);
spriteItem.anchorPoint = CGPoint(x: 0.5, y: 0.5);
spriteItem.size.width = CGFloat(gridWH);
spriteItem.size.height = CGFloat(gridWH);
spriteItem.position = CGPoint(x: gridWH * j + (gridWH/2), y: -gridWH * i - (gridWH/2));
self.mapNode!.addChild(spriteItem);
default:
break
}
}
}
}
运行後可以看到以下成果:
我们的迷宫变得更精致了!是不是更有游戏的 FU 了呢!
大家可以用程序写出自己想要的迷宫样子,并且自由地套上不同样式的图片,制作成属於自己的迷宫。
明天开始来制作主角吧~
<<: [Day06] Flutter with GetX shared_preference
bottomsheetDialog是一种底部弹出的Dialog。今天会实作一个简单的自定义botto...
Golang Gin初探 网路上都有golang的各种框架,也不乏各式各样的比较文 ,我原本是选好要...
Keyword:Xcode,simulator 到Day6完成第一个KMM专案的Code放在 KMM...
前几天完成了一个简单发送认证码的 LIFF APP,其实还有很多可以优化的地方,像是在送出 Requ...
今天没意外的话,会是 Supporting PMUs on RISC-V platforms 的最後...