RE:重新开始的world of tank建造之旅(视角?)
精华2019/09/17524 浏览综合
当我的战舰更新时:

每次更新意味着一次大清洗,各种报废各种Bug,这游戏堪称手游硬核之王,不仅仅因为其及其丰富的内容,还有各种玩家与Bug和程序猿的抗争血泪史......不过这次更新这边战况很棒,没有什么报废与Bug,于是乎,脑子一冲就想着边写帖子,边做一个World of Tanks(坦克世界!)

那么先请出我们的女嘉宾:女皇的小君主坦克!

出生的亚子总之不可能直接生出一个坦克啦,这边又不是母*
那第一步就先基础做起8:
区别触碰点兼容操作,就是所谓的:多点触碰。
这边写的程式可能会和其他人有很大的不同,所以不要介意~
so先搞个左右半屏双点的,主要原理是以屏幕坐标系的过x0.5的垂直线作区分,就是一个超简单的逻辑区分。首先获取第一个触碰点(默认第一个触碰点序号0)

然后写判断第一个触碰是在屏幕的左还是右,以编写获取顺序

再用获取坐标顺序序号原理获取向对应的坐标

这样的话点左半屏的话“触碰1”就等于0,“触碰2”就等于左半屏你触碰的坐标,右半屏也是如此,这样就完成了两边互不干扰同时工作的基础了,最后再写上全局变量其他逻辑调取使用就好了。

这边觉得接着写视野比较好,毕竟很多东西都是围绕视野运作的,不过嘛...这边要来点不一样的,前人没试过的,新奇的方式来搞视野!
这边写在自定义方法里头,虽然启动都要调用,不过不仅可以把几个代码分开使用,还有一些更强大的用处O
首先要复制一个右半屏坐标(大扎的视角滑动一般是在右半屏的吧)全局变量的变量功能里面有的o

然后再读取触碰点的X或者Y分量(屏幕坐标没有长度Z的毕竟手机是块铁板嘛~)作为判断是否按下右半屏(没按下时坐标全都是000)

判断是否按下屏幕后,接下来就要制作划屏了,首先是要写一条划屏的读取方式啦,这边做法是读取点下瞬间的坐标和拖动方向坐标的差来读取划屏距离的,首先要一个锁存来记录按下瞬间的坐标。让这边来写个锁存吧。

(原理:布尔值默认为假,而且如果没有改动参数的话参数保留到下一帧,非门反转布尔值启用包括的程式,最后再把布尔值变成真,下一帧时程式将因为非门反转而不启用,这个程式里面修改的参数就得以保存)这样子就成了,接着就是取与拖动走坐标的差了,也很简单,用向量计算。

这样子拖动距离的方向坐标就写出来了。下面先接一个松手解锁来解开锁存。

到了这里,很多搞过划屏的人都应该猜得出下一步是什么了,所以这边也不详细讲解了。
但是,这边说过这边写的程式和其他人不同吧~真正的Brain power!现在才开始!
学渣警告! 学渣警告! 学渣警告!
这边的视角方向点是建立在贝赛尔曲线形成的○的基础上的,要确立○上的一个点,所以这个视角方向相对于原点就是一个周期函数。首先了解这个游戏的贝赛尔曲线的运作:

这是二阶贝赛尔曲线,输出的坐标向量是这条曲线上的点,有一点建模基础的观众们应该知道三点画圆弧吧~

起点,控制点(中点),终点便是这三点,系数则是从起点开始按照比例截的曲线上的点,所以系数最一般使用范围是0~1(0%-100%,0.5就是中点;这个定义域之外的是这个圆弧的函数的延伸部分)然而一个二阶贝赛尔曲线只能组成一个半圆,所以需要俩条贝赛尔曲线来组成一个正圆,因此这边需要的值域是1~-1,意思就是上面的触碰差不能超过这个值域。这是一个很棘手的问题,一般人走路都是可以360度任意转,你总不会大空地转到一半突然卡住吧~

这边用的是一种特别特别简单的笨方法:就是大于1(或者小于-1)就用减法(加法)让他滚回去。 拆分触碰差再把这个方法套到X参数上面(水平参数)Y参数则加以限制(垂直方向限制)

(毕竟tank不是飞机不用各种翻滚~偷懒time~)
最后还有重要的几步,保存当前的差分量用来下一次叠加,限制前面也要再写一个叠加算式


这样基础就好了,接着就是要代入到贝赛尔曲线

原理:根据系数正负改变贝赛尔曲线的控制点然后对应系数读取坐标

上图写的是系数的正负判断程式

这是贝赛尔写法,先做好水平的贝赛尔曲线判断(X轴移动)系数取绝对值是因为正负判断已经做好了(所以再有负数就会自动爆炸)接着得出水平的方向点,以视角的水平的方向点作为垂直方向的贝赛尔的起点,作相反坐标(象限转化)作为终点,再套和水平的一样的方法就可以了。然后最后把获得的坐标(现在是以世界0.0.0为原点的)移动到核心上

这样子一个视角的控制点就做好了。
这个控制点以核心为原点,不会因为核心的方向不同而改变,相当于一种火炮双向稳定器的亚子,不过是纯粹逻辑的,而且后面可以加上初始化程式与车子状态同步。不过现在先不搞这个初始化程式,先把摄像机系统搞好吧~(偷懒time)

这边的摄像机系统用的是系统变量里面的摄像机设置

点开之后分别有三种参数:目标点(摄像机原点)角度:X是摄像机水平方向角度(左右)Y是垂直方向(上下)X,Y的参数都是按照360度来算的,至于Z....没试过,应该是不起效的~距离:就是摄像头离原点多远看到这里大伙应该会纳闷这边为什么不直接定一个原点然后划屏参数进XY?这样固然更加简单,也是这边之前做的,但是再阅一下题!这边要搞的是WOT。WOT里面其中一个神奇的功能就是“狙击”,使用前者的话,狙击模式会出现一大堆奇奇怪怪的问题,也不要说摄像头,这边的这个程式是建立在没有摄像头基础之上,于是只能自己创建一个写法来支持“狙击”

↑具体差别,后者视野的三个参数都是动态的,所以可以作更多视角(虽然并没有没什么用)因此只要算出控制点(目标点)和原点的角度在写进摄像机的角度就可以确定摄像机的方向了(方向永远背对着原点)

原理就是自瞄得出的角度原理,因为得出的角度是360°制的所以不用转化直接代到摄像头角度里面了(+180度是为了翻转视野)
那么最后再提高一下原点,这个划屏的视野系统也完成了。

那这样先告一段落了

这个视野后头会影响到划屏瞄准,其他视野与数显几方面的内容...里头的语句的使用方法这边觉得讲的够详细了,如果有什么问题可以留言区留言。
还有最重要的一件事,那就是:白嫖时刻!(估摸着大扎都不认真看教程)帖子正式发布后会在留言区发布白嫖内容(这边应该会忘记,有空催催~)最后祝各位玩的愉快~
