《无线电》2014年合订本(下)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-27 04:13:38

点击下载

作者:《无线电》编辑部

出版社:《无线电》、《高保真音响》杂志社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

《无线电》2014年合订本(下)

《无线电》2014年合订本(下)试读:

版权信息书名:《无线电》2014年合订本(下)作者:《无线电》编辑部排版:KingStar出版社:《无线电》、《高保真音响》杂志社出版时间:2015-01-01ISBN:9787115380432本书由人民邮电出版社授权北京当当科文电子商务有限公司制作与发行。— · 版权所有 侵权必究 · —创客MAKER70后的电视游戏机制作分享

◇许亚敏

20世纪70年代末80年代初的小伙伴们,还记得小时候第一次看到电视游戏机时的兴奋吗?我记得小学时,看到邻居借了一个深色的方盒子,用一根线连接到黑白电视机上,黑白电视机里居然播放出了弹球游戏画面。两个人可以用类似收音机旋钮的东西控制球拍的位置,互相对战弹球,扬声器里还发出“叮叮当当”的声音(见图1)。那种惊讶和好奇直到现在都记忆犹新。5年后,当父亲送给我一台任天堂FC游戏机时,我第一件事就是把它拆开……■图1 雅达利PONG游戏机

一晃20多年过去了,游戏机从早期的8位机发展到了现在的全高清体感游戏机,我也从一个小学生变成了业余创客。好,现在就自己动手制作一台20世纪70年代风格的电视游戏机,怀念一下黑白像素和方波的音效乐趣吧!让看惯了iPad游戏绚丽画面的小朋友们玩玩我们小时候的游戏机,顺便让他们对物理学里的抛物运动知识有一个感性的认识,起到培养兴趣的作用。准备工作:

经过构思,我画了一张设计稿(见图2),对角色造型、布局、玩法进行了大概的设计。■图2 设计稿

游戏的逻辑非常简单:有一天怪兽袭来,小伙伴们奋不顾身用土豆还击;发射土豆的装置类似迫击炮,可以调整炮管的仰角;土豆将以抛物线形式发射出去,当土豆砸到怪兽时,怪兽的生命值会减少,在怪兽到达炮台前将其消灭即可赢得胜利;但是天有不测风云,风会对土豆的弹道产生影响,所以一个优秀的炮手要能够根据怪兽的距离和风向准确地调整发射仰角以命中目标,这个艰巨的任务就交给玩游戏的小伙伴吧!

为了降低开发难度,快速地实现效果,我选择了Arduino UNO进行了原型机的测试。我的计划是只使用一片ATmega328P配合极简单的外围电路实现上述游戏的全部功能。这里面包括电视信号的产生、2D图像渲染、音效的产生、弹道的物理计算、游戏逻辑、游戏手柄的控制信号输入。

我的创客哲学是:“以快速实现目标为原则,着重创新,不纠缠技术细节,开源分享,不做重复劳动”,因此先上网搜索,看看是否有人做过类似的事情。幸运的是,我找到了开源的TVout库。经过测试,发现它非常方便,不但能够绘制点、线、多边形,还可以生成文字和声音。有了它,电视信号的生成、图像的显示和音效问题就很方便解决了。TVout库的测试效果如图3所示。■图3 TVout库的测试效果弹道的计算

第二个问题就是弹道的模拟了。一般情况下,各类游戏引擎就是专门用来计算这个的,可是我需要的仅仅是简单的2D抛物线计算而已,完全没必要兴师动众地去移植一款大型的游戏引擎,所以就自己动手写一个吧。■图4 在不考虑空气阻力的理想情况下简化的土豆抛射运动

首先在不考虑空气阻力的理想情况下简化土豆抛射运动,如图4所示。

如果土豆不是垂直向上发射,而是与地平面呈φ角度射出,那么,这物体会按照抛物线轨迹移动,它的水平运动与垂直运动可以通过下式计算。

x(t)=(vcosφ)t02

y(t)=(vsinφ)t-(gt)/20

v(t)=vcosφx0

v(t)=vsinφ-gty0

v(t)=2

h=(sinφ)/(2g)

R=vtcosφo

t=(2vsinφ)/g0

其中,R-代表土豆的抛射距离,v代表抛射的初速度。o

如果假设土豆是以初速度50m/s,与地平面呈30°角射出。根据公式,不考虑任何干扰因素,它会飞到220.7m远的地方。如果怪兽真被砸到,估计会很痛。

以上是假设了一个具体数字来帮助大家理解。在这个游戏程序中,我们需要解决的问题就是如何写一个程序来计算任意φ时的土豆运动轨迹。一旦这个土豆在某时刻的位置达到怪兽的边界坐标内,那么即说明怪兽被击中;否则当土豆运动到0高度时,则说明碰撞到地面,没有击中目标。

为了能让程序实时地计算出土豆的位置,我们回顾一下那个遗忘了很多年却又十分神奇的牛顿定律。通常线性的运动方程表示如下。

F=mdv/dt

换个形式让它可以被积分

dv/dt=F/m

dv=(F/m)dt

可以认为速度上的无穷小的变化量dv等于(F/m)乘以时间无穷小的变化量。可是在计算机中我们是无法让时间无穷小的,因此我们只能取一个较小的离散时间增量Δt,那么Δv就可以通过下式表示。

Δv=(F/m)Δt

Δv是在离散的时间片段内速度的改变值,因此当前的速度取决于之前的速度与速度变化之和。

v(t)+Δv=v(t)+(F/m)Δt

在初始条件下,vt为土豆离开炮筒时的速度。同理,位置的计算也可以用类似的方法表示。对于风力的影响,我们可以把它简化为在水平方向上的恒定加速度,然后用与垂直方向相同的方法来处理。

经过这样的转化和简化,以上微分方程问题就适合数字计算机来计算了,这就是游戏引擎中常用的所谓“欧拉积分法”。虽然这种方式的计算精度不高,只是对函数曲线进行了多边形近似,但是如果把离散时间尽量取得小一些,对付这种简单的小游戏还是绰绰有余了。搞明白了上面的内容,相关代码就简单了。我们只摘录其中最需要说明的部分。

……

xspeed=xspeed+(float(wind_force)-50.0)*0.0004;//计算离散时间内风对x速度分量的影响

yspeed=yspeed+force;//计算离散时间内重力对速度y分量的影响

xpos=xpos+xspeed;//计算速度对位置x坐标的影响

ypos=ypos+yspeed;//计算速度对位置y坐标的影响

deg=(analogRead(A0)*0.0005)+offset;//通过ADC采集电位器的角度信息,经过转换后用于控制发射方向

xspeed_p=cos( deg )*6;//计算初始速度x分量

yspeed_p=sin( deg )*6;//计算初始速度y分量

........

f(digitalRead(2)==0)//按下发射按钮

{.......xspeed=xspeed_p;//给初始速度x分量赋值yspeed=yspeed_p;//给初始速度y分量赋值........

}

........

在精心地调整各项参数之后,弹道的模拟效果还是比较满意的。游戏画面的绘制

设计好角色后,就可以用简单的几何图形来建模了。比如,首先根据画好的怪兽图形测量出每个定点的坐标,实现这个的方法很多,比如可以借助2D或3D软件直接生成,或者干脆在纸上画上格子数一下。由于TVout库提供了绘制直线和圆的函数,所以可以方便地直接调用。其中enmey_pos是控制怪兽移动的变量。

TV.draw_line(enmey_pos,74,enmey_pos+15,74,WHITE);

TV.draw_line(enmey_pos+15,74,enmey_pos+15,94,WHITE);

TV.draw_line(enmey_pos,94,enmey_pos+15,94,WHITE);

TV.draw_line(enmey_pos,90,enmey_pos,94,WHITE);

TV.draw_line(enmey_pos,90,enmey_pos+10,87,WHITE);

TV.draw_line(enmey_pos,84,enmey_pos+10,87,WHITE);

TV.draw_line(enmey_pos,74,enmey_pos,84,WHITE);

TV.draw_circle(enmey_pos+5,79,2,WHITE);

TV.draw_line(enmey_pos+3,74,enmey_pos+3,68,WHITE);

TV.draw_line(enmey_pos+6,74,enmey_pos+6,68,WHITE);

TV.draw_line(enmey_pos+9,74,enmey_pos+9,68,WHITE);

TV.draw_line(enmey_pos+12,74,enmey_pos+12,68,WHITE);

在绘制角色时要注意图像缓冲区不要设置得太大,否则会导致内存溢出。经过几次尝试,我设置的是120像素×96像素大小。代码如下:

TV.begin(PAL,120,96);

最后实际完成的游戏画面如图5所示。■图5 实际完成的游戏画面游戏逻辑

这个回合制小游戏的逻辑并不复杂,目前也没有特别完善。每发射一颗土豆,怪兽就向前走一步,所以必须在有限的时间内将足够多的土豆扔向怪兽。对于命中怪兽的检测方法,通过条件语句判断在当前时间内,土豆的坐标是否落在怪兽的坐标范围内就可以。

........

if(xpos>enmey_pos-5xpos82)

........游戏的文字和声效

TVout库的声音函数也非常好用,只用一条代码就可以生成方波的声音。如果嫌音质不好,可以加一个简单的滤波器,把高频谐波去掉。文字的绘制需要先设置字体,然后直接调用print函数即可。片头文字(见图6)和音效部分代码如下。■图6 片头文字

........

TV.select_font(font6x8);//选择字体

TV.print(22,24,”Monster will be back...”);//在指定坐标绘制文字

TV.tone(100,500);//产生100Hz的音频持续500ms

TV.delay(1000);//延时1000ms

TV.tone(200,500);//产生200Hz的音频持续500ms

TV.delay(1000);//延时1000ms

TV.tone(300,500);//产生300Hz的音频持续500ms

TV.delay(1000);//延时1000ms

TV.clear_screen();//清屏

TV.select_font(font8x8);//选择字体

TV.print(12,35,”POTATO GUN !”);//在指定坐标绘制文字

TV.tone(100,1000);//产生100Hz的音频持续1000ms

TV.delay(1000);//延时1000ms

........硬件电路

游戏机的电路非常简单,主机用Arduino加两个电阻和一些跳线即可,手柄使用一个电位器、一个电阻和一个按钮。硬件连接如图7所示。■图7 硬件连接方法■图8 连接好的主机

Sync连接到D9,用以产生同步信号,Video连接到D7,用以产生视频的像素信号。实物连接好后如图8所示,面包板上的那两个电阻,实际有点误差也没有太大关系。后面那个黄色的同轴电缆线是电视机的AV输入端子。D11脚直接连接了一个小扬声器,用以产生游戏音效。

游戏手柄(见图9)采用标准的可变电阻器和按钮的连接方法制作而成,电位器和开关分别接在A0和D2上,开关还要加上拉电阻(后来发现可以省略这个电阻,直接使用程序内部上拉电阻)。■图9 连接好的游戏手柄

到此为止,这个游戏机的原型机就完成了,现在可以烧入代码享受一下。改进

在面包板上搭建完成原型机后,我开始着手改进工作。首先是使用体积更小的Arduino mini代替UNO,这样可以把电池和主板都塞到游戏手柄里(见图10)。为了减小体积,电池使用了小型的可充电锂电池,把扬声器替换成了压电陶瓷蜂鸣器,把视频输出的那两个电阻换成了贴片的微调电阻。原来的电位器有点占地方,所以我把它换成了4个微动开关,并且使用洞洞板代替面包板(见图11和图12)。最后,用Rhinoceros软件设计了一款略有复古气息的外壳,由3D打印机打印成型(见图13)。最终组装完成的游戏机如图14所示。■图10 使用Arduino mini代替UNO制作的主机■图11 手柄上换成微动开关,并且使用洞洞板代替面包板■图12 主机、电池、手柄组合在一起■图13 用Rhinoceros设计的外壳,由3D打印机打印成型■图14 最终组装完成的游戏机■图15 发射炮弹击中怪兽的画面

由于我精力实在有限,程序做得比较粗糙,本来设想了一些好玩的情节,比如土豆炮可以换不同性质的弹药,怪兽会发射炮弹反击,每一关会有生命力、速度、进攻力不同的怪兽出现,增加双人对战模式等,但时间有限,暂时无法完成。所以我把程序、电路、3D打印模型文件都开源分享给大家,如果感兴趣,可以在这个基础上继续折腾下去,在这个平台上开发自己的游戏。

祝大家玩得开心,如果有什么新改进,开发了新关卡,或者折腾出了新玩法,别忘了第一时间在新浪微博@超级亚敏,大家一起娱乐娱乐。或许可以组个“臭味相投”的小聚会,哈哈。

■程序、TVout库、3D打印模型文件可从《无线电》杂志网站www.radio.com.cn下载。全面认识3D打印技术

3D打印技术在过去的20年中,从实验室中一个小众的制造工艺走出来,发展成数十亿乃至数百亿美元的产业。据国外市场研究机构Canalys估计,今年全球3D打印市场,包括打印机销售、原料、软件及相关服务等,规模将超越去年,激增52%达38亿美元,预测至2018年,市场规模会增至162亿美元,即在4年间将递增4倍,甚至高于此估值。

◇陆明机◇审:臧海波

今天,人们利用3D打印技术制造出各种各样的产品,例如玩具、手表、家庭用品(见图1)、模型、装饰品、工艺品(见图2)、零件、糖果(见图3)、糕点、人体器官(见图4),甚至房屋、枪械等,数之不尽。总有一天,零件与电路板都可以用3D打印机依你的设计一起打印出来(见图5),不用焊接。■图1 3D打印机制作的自行车■图2 第一代开源3D打印机用塑料制作的工艺品■图3 巧克力3D打印机■图4 3D打印的器官组织

3D打印技术是一种以数字模型文件为基础,运用粉末状或条状的金属、塑料或树脂等可黏合材料,通过逐层打印的方式构造物体的技术。3D打印机出现在20世纪90年代中期,是一种加法技术的设备,而传统的雕刻机是减法技术的设备。3D打印机与普通(2D)打印机的工作原理基本相同,不同的地方是2D打印机的打印头只可两轴(x轴、y轴)移动,而3D打印机则通过电脑辅助设计技术(CAD)3D软件操控,喷嘴可三轴(x轴、y轴及z轴)移动。3D打印机把打印材料喷射出来,一层层叠加起来,利用光或风固化,最终把电脑显示屏上的虚拟立体图像,变成固态的实体物件,确实令人惊叹。

目前最常见的是采用熔融层积成型(FDM)技术的3D打印机,它将丝状的热熔性材料加热熔化,同时三维喷头在计算机的控制下,根据截面轮廓信息,将材料选择性地涂敷在工作台上,快速冷却后形成一层截面。一层成型完成后,机器工作台下降一个高度,再成型下一层,直至形成整个实体造型。■图5 3D打印的MEM(微电子组件装置)元件■图6 3D打印的助听器外売■图7 2D喷墨打印示意图■图8 制造业用大型原型及精细的3D打印机■图9 可彩色打印的专业3D打印机

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载