本人菜鸟一枚,最近对游戏开发提起了兴趣。在用easyx写物体移动时,思考直线移动时有点懵,查找相关帖子、博客等也没有详细说明情况的,所以一时兴起对物体直线运动进行了浅显的探索。不喜勿喷,谢谢。
本帖仅仅讨论物体直线运动,不讨论曲线路径、圆形路径等物体运动。也不讨论代码质量、代码封装等等。
直线运动路径分析
通常物体移动是通过物体的坐标移动来控制物体移动。
从A移动到B,就是求从A到B的每次移动的坐标。先看张图:

A点的x和y在每次移动时的坐标怎么求呢?当你只有A点和B点坐标,从A直线移动到B,怎么移动呢?
可以通过控制x来求解y。这样每次变化x,y可以通过直线方程求解出来。
直线运动路径求解
既然是直线运动,那就找直线的求解方程即可。
设A(x1,y1),B(x2,y2)步进为step
直线公式为:
1. 一般式:ax+by+c=0
2. 斜截式:y=kx+b
3. ……
其它的请参考:https://zhuanlan.zhihu.com/p/26263309
这里以一般式为例;
a、b、c分别可求:
a=y2-y1;
b=x1-x2;
c=x2*y1-x1*y2;
那么:y=(0-ax)/b;
例: x1 +=step,那么y1 = (0-ax)/b;也就是A(x+1,(0-ax)/b);
特殊情况:
垂直:A.x=B.x,A向B移动时,A.x是不变的。这时侯A.x不能+= step; 直接A.y +=step即可;
衍生问题:如何控制所有A点同时到达B点呢?
可以通过速度公式求解step步数。
S= v/t;
A点 s1 = v1/t1;
B点 s2 = v2/t2;
令t2 = t1,那么 v1 = s1*v2/s2 = step;
以下是验证代码:

本帖仅仅讨论物体直线运动,不讨论曲线路径、圆形路径等物体运动。也不讨论代码质量、代码封装等等。
直线运动路径分析
通常物体移动是通过物体的坐标移动来控制物体移动。
从A移动到B,就是求从A到B的每次移动的坐标。先看张图:

A点的x和y在每次移动时的坐标怎么求呢?当你只有A点和B点坐标,从A直线移动到B,怎么移动呢?
可以通过控制x来求解y。这样每次变化x,y可以通过直线方程求解出来。
直线运动路径求解
既然是直线运动,那就找直线的求解方程即可。
设A(x1,y1),B(x2,y2)步进为step
直线公式为:
1. 一般式:ax+by+c=0
2. 斜截式:y=kx+b
3. ……
其它的请参考:https://zhuanlan.zhihu.com/p/26263309
这里以一般式为例;
a、b、c分别可求:
a=y2-y1;
b=x1-x2;
c=x2*y1-x1*y2;
那么:y=(0-ax)/b;
例: x1 +=step,那么y1 = (0-ax)/b;也就是A(x+1,(0-ax)/b);
特殊情况:
垂直:A.x=B.x,A向B移动时,A.x是不变的。这时侯A.x不能+= step; 直接A.y +=step即可;
衍生问题:如何控制所有A点同时到达B点呢?
可以通过速度公式求解step步数。
S= v/t;
A点 s1 = v1/t1;
B点 s2 = v2/t2;
令t2 = t1,那么 v1 = s1*v2/s2 = step;
以下是验证代码:
