本帖最后由 MsYqgzt 于 2016-8-7 18:11 编辑

哟大家好~这里是考试归来的Ms~今天给大家带来的是考后制作的小游戏作品—3D打砖块【Pong】
这个作品并没有周全考虑到游戏性的问题,比较偏向技术向的演示,所有要过关的话难度是蛮大的_(:зゝ∠)_


这里是较为简短的演示视频,希望大家给个五星评价~
地址 http://www.bilibili.com/video/av3696469/

http://static.hdslb.com/miniloader.swf?aid=3696469&page=1

存档在下面放出、


那么开始这次的技巧分享,这个打砖块啊,主要特点在于球,球体模型是材质包的作用。
可以看到是一个带有发光透视效果的球体物品模型,用到了1.9的{Passengers}和计分板的tag
  1. /execute @e[type=ArmorStand,tag=Board] ~0.5 ~ ~ /summon ArmorStand ~ ~ ~ {Invulnerable:1b,Invisible:1b,NoGravity:1b,CustomName:"Ball",Passengers:[0:{id:"Item",Item: {id:"minecraft:sea_lantern",Count:1b,Damage:0s},Glowing:1b,Tags:[0:"Ball"],CustomName:"Ball",PickupDelay:32767,Age:-32768}]}
复制代码


整个地图的所有运动组件都是以盔甲架为载体。一幅图直观表达




作为具有三维矢量运动属性的球,需要创建 三维变量 和 反弹判定 的变量,二者接口衔接,效果就达到了。同时考虑bug的触发问题,球体移动的速度不能过大。【否则穿墙飞出场地】




以坐标系为标准,指针方向为正,反方向为负。指定变量值为45
  1. /tp @e[type=ArmorStand,score_x=45,score_x_min=45,name=Ball] ~0.2 ~ ~
复制代码
  1. /tp @e[type=ArmorStand,score_x=-45,score_x_min=-45,name=Ball] ~-0.2 ~ ~
复制代码
  1. /tp @e[type=ArmorStand,score_y=45,score_y_min=45,name=Ball] ~ ~0.2 ~
复制代码
  1. /tp @e[type=ArmorStand,score_y=-45,score_y_min=-45,name=Ball] ~ ~-0.2 ~
复制代码
  1. /tp @e[type=ArmorStand,score_z=45,score_z_min=45,name=Ball] ~ ~ ~0.2
复制代码
  1. /tp @e[type=ArmorStand,score_z=-45,score_z_min=-45,name=Ball] ~ ~ ~-0.2
复制代码

如何取反的问题其实不难,穷举方法很多,个人使用的是设定一个定值—direction假名的变量为-1

场地内部裹着一层屏障方块。探测碰撞
  1. /execute @e[type=ArmorStand,name=Ball] ~ ~1 ~ detect ~0.3 ~ ~ minecraft:barrier 0 /scoreboard players operation @e[type=ArmorStand,score_x_min=30,score_x=60,c=1,name=Ball] x *= direction condition
复制代码
  1. /execute @e[type=ArmorStand,name=Ball] ~ ~1 ~ detect ~ ~0.3 ~ minecraft:barrier 0 /scoreboard players operation @e[type=ArmorStand,score_y_min=30,score_y=60,c=1] y *= direction condition
复制代码
  1. /execute @e[type=ArmorStand,name=Ball] ~ ~1 ~ detect ~ ~ ~0.3 minecraft:barrier 0 /scoreboard players operation @e[type=ArmorStand,score_z_min=30,score_z=60,c=1] z *= direction condition
复制代码

反方向原理相同,将X、Y、Z的存储数据直接取反,运动状态与tp的系统联动,产生反弹效果。



碰撞砖块并击碎也是利用了距离差来实现。
这里的所有砖块都是羊毛,通过材质包更改贴图。【除了裂纹砖是原型贴图】

这样一来穷举工作量就小了很多
  1. /execute @e[type=ArmorStand,name=Ball,score_Fire=0] ~ ~1 ~ detect ~0.3 ~ ~ minecraft:wool -1 /scoreboard players operation @e[type=ArmorStand,score_x_min=30,score_x=60,c=1,name=Ball,score_Fire=0] x *= direction condition
复制代码
  1. /execute @e[type=ArmorStand,name=Ball,score_Fire=0] ~ ~1 ~ detect ~0.3 ~ ~ minecraft:wool -1 /setblock ~1 ~ ~ minecraft:air 0 destroy
复制代码

将石砖打成裂纹砖的方法相同,改变替换方块的种类即可。



有兴趣研究或者游玩的同学,这里放上下载地址:http://pan.baidu.com/s/1kVOtAbt

=================END====================






[groupid=1009]The Command's Power[/groupid]