『小熊带你玩科技』KB代码实现3D赛车游戏?2kPlus Jam大赛了解一下,如何用2( 二 )
代码需要被压缩到2KB以内 。 如果你不想选用上一种方案 , 还有一个类似的、但功能较弱的工具——RegPack , 它可以在严格遵守规定的情况下编译JavaScript 。 无论哪种方式 , 策略都是一样的 , 尽可能使用重复的代码 , 然后在压缩的时候压缩它们 。 例如 , 某些字符串经常出现 , 因此它们的压缩比很大 。 「c.width」、「c.height」和「Math」就是一些很好的例子 , 但还有很多其它的小问题 。 因此 , 在阅读这段代码时 , 请记住 , 你经常会看到一些重复代码 , 这些重复是有目的的——便于压缩 。
CodePen
下面我们将给出一款在Codepen上运行的游戏 。 你可以在iframe上玩这个游戏 , 但是为了获得最佳的游戏体验 , 我建议你使用链接(https://codepen.io/KilledByAPixel/pen/poJdLwB)打开它 , 这样你还可以编辑或是创建代码分支 。
HTML
我的游戏使用到html的部分很少 , 因为它主要是基于JavaScript开发的 。 JavaScript创建全屏画布的方法和与后面将画布大小设置为窗口内部大小的代码都是最节省空间的 。 我不能确定为什么CodePen中需要将「overflow:hidden」添加到「body」标签中 , 但是直接打开应该也可以正常工作 。
最终的压缩版本使用了更小的设置——把JavaScript包在一个「onload」事件的「call」方法里() 。 但是 , 我不喜欢在开发的时候用这种压缩的设置 , 因为代码是以字符串形式存储的 , 这样编译器也就无法正常地强调语法 。
常量
游戏中的很多东西都是由常量来控制的 。 当我们用类似GoogleClosure这样的工具来进行压缩时 , 这些常量就会被替换成类似于C++中的「#define」的形式 。 将它们放在开头能够更快地调整游戏玩法 。
//drawsettingsconstcontext=c.getContext`2d`;//canvascontextconstdrawDistance=800;//howfaraheadtodrawconstcameraDepth=1;//FOVofcameraconstsegmentLength=100;//lengthofeachroadsegmentconstroadWidth=500;//howwideisroadconstcurbWidth=150;//withofwarningtrackconstdashLineWidth=9;//widthofthedashedlineconstmaxPlayerX=2e3;//limitplayeroffsetconstmountainCount=30;//howmanymountainsarethereconsttimeDelta=1/60;//inverseframerateconstPI=Math.PI;//shorthandforMath.PI
//playersettingsconstheight=150;//highofplayerabovegroundconstmaxSpeed=300;//limitmaxplayerspeedconstplayerAccel=1;//playerforwardaccelerationconstplayerBrake=-3;//playerbreakingaccelerationconstturnControl=.2;//playerturningrateconstjumpAccel=25;//zspeedaddedforjumpconstspringConstant=.01;//springplayerspitchconstcollisionSlow=.1;//slowdownfromcollisionsconstpitchLerp=.1;//ratecamerapitchchangesconstpitchSpringDamp=.9;//dampenthepitchspringconstelasticity=1.2;//bounceelasticityconstcentrifugal=.002;//howmuchturnspullplayerconstforwardDamp=.999;//dampenplayerzspeedconstlateralDamp=.7;//dampenplayerxspeedconstoffRoadDamp=.98;//moredampingwhenoffroadconstgravity=-1;//gravitytoapplyinyaxisconstcameraTurnScale=2;//howmuchtorotatecameraconstworldRotateScale=.00005;//howmuchtorotateworld//levelsettingsconstmaxTime=20;//timetostartconstcheckPointTime=10;//addtimeatcheckpointsconstcheckPointDistance=1e5;//howfarbetweencheckpointsconstmaxDifficultySegment=9e3;//howfaruntilmaxdifficultyconstroadEnd=1e4;//howfaruntilendofroad
鼠标控制
输入系统是非常简单的 , 只用到了鼠标 。 使用下面这段代码 , 我们可以跟踪鼠标点击和水平光标位置 , 并将其表示为-1到1之间的值 。 双击是通过「mouseUpFrames」实现的 。 「mousePressed」变量只在玩家第一次点击开始游戏时使用一次 。
推荐阅读
- 小米科技▲卢伟冰再次发力,全球首发骁龙768G,5G新机将在两天后发布!
- 快科技最贵或达5000元,苹果头戴耳机更多细节曝光:包含两款
- 科技迷7nm版年底流片,要放弃美国代工?国产x86转向三星台积电代工
- 骊微电子科技PD充电器应用方案,PN8161+PN8307H高集成18W
- 快科技小米高管都是外人?雷军透露了一个秘密
- 靓科技解读Thing,a16z、5.15亿美金的数据加密股票基金:找寻下一个Big
- 王伯伯说科技流畅用三年,即将开学的学生党准备好了吗?三款高配低价千元机
- 知叔达科技中芯国际早已料到,成功绕开了光刻机,怒了!荷兰ASML再次失约
- 小熊带你玩科技数据成粤企生产新要素,工业互联网深调研〡从经验依赖到数据驱动
- 每日科技果粉大批华人再掀归国潮,美利坚的钱“不香了”?,硅谷科技人才流失