level 11
夏午👀
楼主
这是中高级的教程!
旋转+平移3d
经过一段时间的研究和以前的基础,我设计出了既可以旋转又可以平移的3d算法。下面引用两个帖子:
一个是@4399ok00 的可以旋转的立方体:https://tieba.baidu.com/p/5247539550
还有一个是@Gavin544221 的可以平移的立方体:https://tieba.baidu.com/p/4964655462
但他们的立方体都不能实现对方的算法,我在这里将两者结合起来,就更接近于真3d
但是!这仍然是伪3d!
文件和原理图:百度网盘
效果:

(如果图片没动就下载文件查看)简单说一下原理:
总体是将三维上的点映射到二维上(就是把三维的点画在屏幕上)
如果摄像头不旋转,只面向z方向平移,那么根据凸透镜成像原理可以直接计算出点在屏幕上的坐标,这是@Gavin544221 的算法
如果摄像头旋转,而且平移,我的想法是让点恢复到没有旋转之前的坐标,再运用上一个算法,旋转需要用到旋转矩阵(如果大家对矩阵感到陌生,就理解为旋转需要用到旋转公式)
具体我给个文献链接:https://jingyan.baidu.com/article/2c8c281dfbf3dd0009252a7b.htm
关于bug的爆炸增长
据我了解,贴吧中几乎每一个作品都会提到修复bug的字眼。也就是说随着作品的开发,bug不可避免。事实上,真正的bug不容易修复。而帖子中通常在下一个版本就修复了bug。所以这些bug应该是因为自己的小小失误而产生的。做到以下几点,你的bug会大量减少:
每个脚本开头初始化将要使用的变量(变量包括自己创建的变量和坐标,造型等)。我见过的光是因初始化不当而出现bug的作品不计其数
优化,优化!我在学习scratch的时候始终在学习优化,也就是寻找更简洁的代码。我所见过的作品中一般都是没有优化过的。一股脑的拖拽模块而不对已经做好的脚本进行优化可不是一个好习惯,首先带来的是文件大和运行慢,再来就是一堆让你抓狂的bug。这时候你只能弃坑重做了。几百个模块的逃脱魔鬼世界游戏就被我给扔了
(好像只有这两个注意事项)
补充一下:重复的代码两个以上就要使用自定义模块,类似的代码要想办法用变量或列表优化成一个代码,尽量减少使用递归
多个克隆体的数据交互
有关sc,我们都了解克隆模块,克隆模块能够做到克隆角色脚本,造型,音乐,属性和私有变量,但克隆体只是释放到内存中,也就造成了模块无法选择克隆体的问题,如到()的距离模块,不能选择克隆体,也就导致无法获取克隆体之间的距离。为此,我们需要提供一个开放的平台,这个平台就是列表!
列表就是动态数量的变量,利用这个特性,我们将需要克隆体交互的数据加入到列表中,比如坐标,我们可以设计一个数据的格式,如:
1 克隆体1的x
2 克隆体1的y
3 克隆体2的x
4 克隆体2的y
5 。。。
将列表设为角色共有,为标识这些数据的归属,应设置一个私有变量,然后将变量数据指向列表索引,具体脚本如下:
私有变量 地址
公有列表 数据
地址设定为1
自定义模块 克隆自己
将x坐标加入数据
将y坐标加入数据
克隆自己
地址+2
当作为克隆体启动
重复执行
将数据的地址项替换为x坐标
将数据的地址+1项替换为y坐标
这样一来,你想计算里自己最近的克隆体
//返回到最近克隆体的距离
私有变量 r,min,计次
将计次设定为1
min=根号(数据的第计次项^2+数据的第计次+1项^2)
重复执行数据的长度/2次
将计次+2
r=根号(数据的第计次项^2+数据的第计次+1项^2)
如果(r<min)
将min设定为r
返回min
(例子有错误,请注意!)
游戏加速算法
在设计游戏前期想实现游戏加速功能,对于一个脚本,可以这么设计:
编写完一个游戏脚本后,把脚本建立一个自定义模块,再建立一个自定义模块:速度模块,设置不刷新屏幕。速度模块脚本如下:
自定义 速度模块 参数速度
重复执行 速度 次
游戏脚本
这样,通过调整速度这个参数,就可以实现改变游戏的速度,参数越大,速度越快,参数越小,速度越慢
速度模块只对每帧加速,所以要在外面套上重复执行才能使程序持续运行
模块化编程
试想,sc可以导入模块,导入后就可以使用这些模块,这一定为某些伸手党提供了方便
sc自带导入功能,其中能导入脚本的只有导入角色这个功能。故我将一个角色另作一个模块,模块内部没有事件,但有可供使用的自定义模块。要调用这些模块,需要给每个自定义模块加一个对应的广播,如果要调用模块,首先把模块的输入推入(加到)一个列表或存到变量中,再广播,模块会将输出推入(加到)列表或存到变量中。实现了模块的调用。
你可以将自己编写好的模块分享给他人,告诉他们这个简单的规范,他们就可以使用这个模块,你也可以在网络上搜索模块,寻找你想要的模块,并在自己的工程中使用
(多么美妙啊,但是能实现吗?)
(此贴讲规范,下面的帖子我会尝试发一些自己制作的模块)
夏午原创,转载请注明作者!