- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我听说旧的街机横向滚动游戏使用特定的编程技巧来实现高性能横向滚动。
据我了解,几年前,机器的功能还不足以像现在那样每帧重新绘制整个屏幕。有一些技术,例如脏矩形,可以在背景静止且只有 Sprite 移动时最小化重新绘制所需的屏幕区域。
上述方法仅在背景不变时有效(因此大多数屏幕像素保持静止)。
垂直滚动游戏,就像老式的射击游戏一样,由于滚动而背景会改变每一帧,所以事情变得有点困难。然而,人们可以利用像素馈送到显示器的方式(逐行)。我想,可以使用更大的缓冲区,并将数据指针每帧“向下”移动一些行,以便从另一个位置开始重新绘制,从而给人平滑滚动的印象。仍然只有 Sprite (以及屏幕边缘的一些背景)需要重新绘制,这是一个重大的优化。
但是,对于横向卷轴游戏来说,事情就没那么简单和明显了。不过,我知道有人在过去的某个地方进行了优化(有一些限制),允许旧机器水平滚动背景,而无需每帧重新绘制背景。
IIRC 它被用在许多老游戏中,主要是 80 年代的节奏游戏,以及演示场景制作
您能描述一下这项技术并指出其作者吗?
最佳答案
我已经为老式的 C64 编写了游戏,正是这样做的。基本上有两件事需要注意:
这些游戏没有使用位图图形,而是使用“重新映射”字符字体,这意味着 8x8 像素 block 实际上只是一个字节。
接下来要注意的是,硬件支持将整个屏幕替换为七个像素。请注意,这不会以任何方式影响任何图形 - 它只是使发送到电视的所有内容都有点移位。
所以 2) 使得真正平滑地滚动 7 个像素成为可能。然后你移动每个字符 - 对于全屏来说正好是 1000 字节,计算机可以处理,同时你将滚动寄存器向后移动 7 个像素。 8 - 7 = 1 意味着您看起来又滚动了一个像素...然后就这样继续下去。所以 1) 和 2) 结合起来就产生了真正平滑滚动的错觉!
之后第三件事开始发挥作用:光栅中断。这意味着当电视/显示器即将开始在指定位置绘制扫描线时,CPU 会收到中断。该技术使创建分屏成为可能,这样您就不需要滚动整个屏幕,这与我的第一个描述相反。
更详细地说:即使您不想要分屏,光栅中断也非常重要:因为它当时和今天一样重要(但今天框架对您隐藏了这一点) )在正确的时间更新屏幕。当电视/显示器在可见区域的任何位置更新时修改“滚动寄存器”会导致称为“撕裂”的效果 - 您可以清楚地注意到屏幕的两个部分彼此不同步一个像素。
还有什么好说的?嗯,重新映射字符集的技术使得制作一些动画变得非常容易。例如,传送带、齿轮等可以通过不断改变屏幕上代表它们的“角色”的外观来制作动画。因此,只需更改字符映射中的单个字节,跨越整个屏幕宽度的传送带就可以看起来像在各处旋转。
关于graphics - 老游戏中的 "side scrolling hack"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113243/
我希望在我的页面上使用一些吸引眼球的实验性 CSS,例如 border-radius(圆 Angular )和渐变。不幸的是,Internet Explorer 还不支持任何这些。至少 border-
我不喜欢微软的字体渲染。 我为客户创建了一个站点,我的调试列表中最后一个未选中的框是最大的。 (顺便说一句,它还没有“上线”,所以请忽略任何其他错误 - http://baked-beans.tv/b
一般情况下,当我们想在同一页面显示某个网页的内容时,我们会使用ajax请求。如果说,我使用 AJAX 请求不同域中的网页,由于跨端脚本错误,这是不允许的。但是为什么允许通过服务器端页面访问。例如我们可
在我的 css 代码中,我有一些 hack,我想影响 IE6/7 #topmenu li a.activa, #topmenu li a.activa:hover{ *background:
在过去的两个月里,我一直在试图“愚弄”safari,让它认为它正在查看服务器上的一个文件,这实际上是来自摄像机的实时视频流,根据请求使用 Gstreamer 编码和混合成一种格式这是浏览器支持的。由于
怎么说呢,相信很多考过竞赛的同学都会在平时的练习/考试中遭遇过100分但没有AC的情况,结果一看评测结果:subtask的数据点没过! 这时候就是遇到hack数据了,如果被这类数据卡住,说明你
Avast 不时出现在我的一个网站上。有点奇怪,因为我对安全性非常严格,但我检查了 index.php 文件和所有相关的包含和脚本。在我删除的“header.php”文件中发现了一些奇怪的 PHP 代
所以我使用一个程序,我在 lua 中编写 mods,lua 处于沙箱状态,这意味着大多数功能都被阻止,如 IO 和 OS,我什至不能使用 REQUIRE 添加库。我需要一个功能来解压缩我的一个 mod
在 Wiki page for Sudoku solutions ,一种解决方案声称使用“Dot Hack”。链接的 Github 页面不再可用,我在别处找不到任何关于它的信息。 这是关于什么的?它有
嗨, friend 们,是否有可能获得像这样 100% 宽度和高度的双色背景 这是示例图像: Sample Image http://www.mediaserveit.com/demo/vivek/r
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我有一个网站使用来自谷歌字体的自定义字体。在我的网站上它是正常对齐的,但在我的 android 上,源不对齐。通过各种移动技巧进行研究,我想知道它们是否真的有效,因为经过一项一项的测试,它并没有奏效。
我正在使用... background:url(menu-bg.png) repeat-x, url(spot.gif) repeat; background:url(spot.gif)\0/; 在
我尝试隐藏/显示 div“游戏类型”,但如果输入复选框在列表项中,则以下代码不会运行,我不明白为什么 是否可以在不使用 js 的情况下使用“no-game”输入禁用“pc”和“xbox”输入? inp
简单的问题:我正在 HTML5/Socket.io 中构建一个多人游戏,并使用 Phaser 作为游戏框架。我现在已经进入了为黑客行为添加预防措施的阶段了。 基本上我的问题很简单:潜在的黑客是否可以实
是否有任何方法(hack)插入 Python 函数(def)通过引用返回结果,即使对于不可变类型也是如此? 提案申请(swap as subroutine): def swap(a, b): ....
谁能帮我解决这个问题。我是 css 样式的新手。我有一个 css 文件,其中包含我要构建的 asp.net 网站的所有样式。然而,它在安装了 IE 7 的服务器上运行良好,当我尝试使用 chrome、
以下制作可变大小结构的方法有什么问题? struct tode{ int g; int *p; }; struct tode *lp = malloc(sizeof
我已经停止为不同的浏览器使用 CSS hack,而是支持“条件注释将类添加到 html 标记”方法。 这让我想到了我的问题。我如何编写这个 ie8 hack 没有 hack? .grab-cursor
这样的闭包实现有什么问题吗(从python hack中偷来的)? void function(int value) { struct closure { closure(int
我是一名优秀的程序员,十分优秀!