幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2129|回复: 0

[NS] [已解决]求教NS程序实现两点间移动的过程

[复制链接]

9

主题

48

帖子

569

积分

⑤进阶

积分
569
发表于 2008-9-25 12:33:45 | 显示全部楼层 |阅读模式
现在需要实现这么一个功能的过程:用lsp2命令,实现图片的移动及放大,从点Ⅰ(X1,Y1)移动到点Ⅱ(X1,Y2),并且点Ⅰ时图片是放大Z1倍的,点Ⅱ时图片是放大Z2倍的。
从数学角度来看,如果将图片缩放的变量也看做是一个坐标,那么其实就是三维空间内2点确定一条直线(包括lsp2命令中的横坐标、纵坐标和放大倍数)

但无论是从计算机程序角度考虑,求3个变化量的最小公倍数然后写过程,还是从数学角度来考虑做3个变量的重叠循环,然后符合某一直线方程,对于NS来说都是很复杂的。

不知道各位前辈有没有什么更好的思路,或者已有的代码能让我借鉴?

defsub pointpath

*pointpath
getparam %1,%2,%3,%4,%5,%6    ;X1,Y1,Z1,X2,Y2,Z2




当然,如果能进而控制在这移动过程中的时间,那是最好不过的了!即要求以上移动过程在T毫秒内完成。
————————————————————————————————————————————————————
写到上面最后一句时忽然想明白了……
没必要把这条轨迹上的每个点都算出来,甚至是把方程算出来。计算机本来就是离散的,而非连续的。
只要把2点之间的线段分割成N分(比如1000)
然后取一个变量%1,
for %1=0 to 1000

然后每次X、Y、Zoom轴都各自增长(X2-X1)*(%1/N)份即可。而因为每经历一次for循环,计算过程都是需要时间的,所以for循环的步长(step)参数就可以控制变化的速度了。

最终解决方法:
  1. *singlepath
  2. getparam %15,$15,%16,%17,%18,%19,%20,%21,%22    ;    spritNo,filepath,x1,y1,zoom1,x2,y2,zoom2,Speed
  3. for %23=0 to 1000
  4.     lsp2 %15,$15,%16+%23*(%19-%16)/1000,%17+%23*(%20-%17)/1000,%18*100+%23*(%21-%18)*100/1000,%18*100+%23*100*(%21-%18)/1000,0,255
  5.     print 1
  6. next
  7. return
复制代码
我的百度空间:hi.baidu.com/wildgun
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-1 20:00 , Processed in 0.019343 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表