80年代宝藏游戏“马里奥”,发现个有意思的东西,讨论一下,补充一个1989年最新电脑配置和价格


不知道能不能看清,马里奥的身体,一半在左边,一半在右边
早期的很多地图,都是这种连贯的地图,从右边出去,就会从左边进来,从左边出去,就会从右边进来
如果让我来实现,我能怎么做呢?
1.让马里奥拥有2个节点
2.一个移出屏幕的时候,将另一个移进来,位置的话,刚好距离一屏
3.如果右边的节点移出左边,则左右节点互调

但仔细研究,我赶紧早期游戏肯定不会用这种方案。因为除了马里奥,怪物,还有地形,几乎都是这种设定。早期极度可怜的内存场景,肯定不用这种方法实现,那么多半是用图形学来做了。
放在Cocos里面,就属于shader的范畴,那么,有人实现过类似效果吗?

有不少人感兴趣,我就抛个砖先:
1.80年代,可能opengl还没出来,但我们如果高效实现,可能还是依赖opengl
2.古老游戏的跨屏解决方案,疑是硬件支持:Stupid NES Tricks – Screen Wrap Detection | dustmop.io blog
3.自定义shader免不了,传入一个屏幕范围,超出范围的部分 渲染到另一侧

有更好的方案或者大佬实现了,欢迎讨论

4.28:
补充一个1989年的电脑配置和价格

实际上,早年间的游戏开发者们个个都是大神,只不过现在很难去琢磨他们如何去解决游戏中的各种难题了。要是有分享就好了

类似于glsl fract函数的效果, uv超过1的时候只取小数部分

可以想象一下, 屏幕外还有2个窗口, 这里的窗口也可以是摄像机, 总共有三个摄像机, 分别为屏幕左侧中间和右侧的摄像机 三个摄像机的渲染结果都叠加放在中间的屏幕上, 其中左右两个屏幕外的摄像机只渲染人物和怪物, 中间的摄像机就是主摄像机, 只要马里奥出了主摄像机的渲染范围进入两侧摄像机范围,就会由两侧的摄像机把马里奥剩余的半截身子渲染到中间的窗口里面来, 我个人觉得差不多是这个意思~

早年没有现在这么丰富的api,内存也受限
记得我刚入行的时候,我们接到的一个需求是,编写一个手机小游戏,最大5M的运行内存

我也在这么考虑的,就是这里图片到屏幕的映射

用同一个纹理缓冲区,并不会浪费显存吧。
cpu端/内存也是多几个顶点/uv信息而已。

多相机的开销太大了

早期游戏居然几乎没有卡死的bug,好屌,我玩小霸王玩了几十款通关游戏了,没卡死过

有卡死的bug,搜索下恶魔城(吃了定时道具,然后某一帧进门会卡死)、冒险岛4(金字塔boss用翼龙打一定几率卡死) :smile:
【FC 恶魔城各种bug合集 总有一个你没见过-哔哩哔哩】https://b23.tv/0FLYvI0 视频第12分34秒

不知道,我通关一般都是连玩一两个小时,要是卡死直接气死,目前我通关的有:魂斗罗,雨中魂斗罗,雪人兄弟,sd快打旋风,松鼠大战1,松鼠大战2,泡泡龙200多关,马戏团, 冒险岛,神龟闯关,雪人敲砖,大力水手,很多记不起了

看下视频链接,我刚更新了下回复

我神龟比武 会释放无敌 你打我不掉血 这不是bug,是专门设计的,而且操作很难,就这个东西,我当年装了100次b了 :smile:0E33A5FF-E590-43bd-8EC9-5BF3F6F60B11

没玩过,五一可以一起打游戏 :yum:

就上面图片那个游戏,这个游戏7个人绝招我全会,随机抽一个虐别人哈哈哈

这个我玩过,特别喜欢用龙吐火

那时的游戏机渲染机制是创建一个只有很少颜色的调色板,然后在“白布”上画格子,所以你说的这个场景反而好实现,就是逐格检查像素,小于0就加画布宽度,大于屏幕宽度就减画布宽度
不过话说回来当年的游戏制作人真的是个顶个的奇才

1赞

你想多了,那个年代都是直接操作现存的,包括画图代码都是,直接把精灵图画到显存里,所以画精灵时,超出的左边用代码计算下,就拷贝到另一个位置了。

关于史前时代画图优化,可以看这本书:

https://book.douban.com/subject/1437108/

没错,使用cpu绘制位图,大概就是这样

有没有可能是bug?
之前有次做画板系统(cocos自带的用严重锯齿)
用到了
rendertexture
在超过width的时候就取了整
出现过类似的现象