11年9个月前IP:广东
755073
12楼
引用 坚持and突破:
我到现在还好奇那个光枪是怎么作的....
百度贴吧这里有解释:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


之前在各处的网站看到关于红白机上光枪原理的各种解释,它们大多是转载,且内容基本相同。
我对FC红白机的硬件和模拟有一定的了解,认为上述帖子讲解的内容是错误的,在这里为大家讲解我所了解的光枪工作原理。

FC红白机光枪的工作原理很简单,这归功于FC游戏厂商的巧妙设计。
首先我们先来认识FC的光枪。图片就免了。
FC的光枪有三个关键部分:
第一个是枪头,它的内部有有感光芯片;
第二个是光枪上唯一的按钮,就是扳机,在游戏的过程中,瞄准的同时需要按下扳机进行射击。
第三个是接头,这个和2P手柄的位置是相同的。
在理解光枪工作原理之前,首先需要让大家了解到,红白机的手柄和光枪都是串行设备。撇开手柄不谈,光枪接口的7个口中,有两个口用来提供状态信息。这7个口的定义如下:
1    Out GND        GND        Ground
2    Out PORT0-CLK PORT1-CLK Joystick Clock (CPU Port Read)
3    Out OUT0       OUT0       Joystick Serial-Start
4    In  PORT0-0    PORT1-0    Joystick Serial-Data
5    Out +5VDC      +5VDC      Supply
6    In  PORT0-3    PORT1-3    Zapper Light
7    In  PORT0-4    PORT1-4    Zapper Button
我们可以看到,第6bit和第7bit是光枪提供的信息。第6位表示光枪检测到的光的强弱。第7为表示玩家是否扣下了扳机。
光枪游戏就通过检测扳机的状态以及检测到的光的强弱来判断玩家是否击中了目标。需要注意的是,这个光的强弱只能用0和1表示,所以光枪游戏要求电视或者屏幕的对比度要高,否则光枪不容易区分光到底是强的还是弱的。典型的,白光是强的,黑色就是弱的。

这里以《打鸭子DUCK HUNT》为例,游戏正常的情况下如图1所示,图中有两只鸭子。


当玩家按下扳机,游戏画面会变黑,如图2所示。这个画面的切换比较快,大概在30ms左右。
这屏幕变黑的这段时间中,游戏可以检测光枪返回的光枪,看是否为弱。
之后,第一只鸭子的位置会用白色块显示,如图3所示,从图2到图3在30ms左右。
如果这个时候游戏发现检测到的光强很强,那就说明玩家击中这只鸭子了。
大概过50ms左右,画面会切换到图4,白色块显示在第二只鸭子的地方,如果游戏此时发现光强为强,那么就说明玩家击中第二只鸭子了。
再过50ms左右,游戏会返回到正常画面。以上就是光枪的工作过程了。

由于屏幕会一瞬间变黑,玩家还是可以感觉到的。
其他游戏的检测方式大体相同,当画面的可击中物体较多时,画面闪烁的延迟也会加大。
很多人可能也知道,在射击的时候突然将枪对准灯泡,可以让游戏百发百中……

我以前买过一本介绍红白机维修的书,上面也讲过光枪的原理,基本上和这个类似

只能说昭和时代的鬼子工程师厉害,用低成本就搞出了一样一个东西。现在的电子产品,动不动就上高采样率,高成本的sensor、高成本的外设,但其实总体的体验并不高
评论
文号 / 755073

千古风流
名片发私信
学术分 4
总主题 198 帖总回复 2448 楼拥有证书:学者 机友 笔友
注册于 2015/01/11 13:58:18最后登录 2026/10/30 22:49:49
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:广东

个人简介

收音机爱好者

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的