任意形状的旋转系统
nikaple吧
全部回复
仅看楼主
level 11
Nikaple 楼主
一楼还是打老虎
2014年08月24日 14点08分 1
level 11
Nikaple 楼主
旋转其实非常简单,在这里利用3个局部变量:len、dir和spin(所以在其他的事件中最好不要用到这几个变量)。len、dir表示该obj离旋转中心的距离、方向;spin表示该obj是否在旋转(1表示正在旋转)。这里写成两个脚本使用:
①脚本名:spin_around
代码:
//spin_around(x,y,len,dir,speed),(x,y)为旋转中心坐标,speed为旋转速度(度每步)
{
x=argument0+lengthdir_x(argument2,argument3);
y=argument1+lengthdir_y(argument2,argument3);
dir+=argument4;
}
②脚本名:spin_init(x,y)
代码:
//spin_init(x,y),(x,y)为旋转中心坐标,如不填的话则默认为中心(400,304)
{
xx=argument0;
yy=argument1;
if !xx{xx=400;}
if !yy{yy=304;}
len=point_distance(xx,yy,x,y);
dir=point_direction(xx,yy,x,y);
spin=1;
}
2014年08月24日 15点08分 3
level 11
Nikaple 楼主
在需要旋转的obj的step事件中,写入代码:
if spin{
spin_around(400,304,len,dir,5);
}
当你想让它们开始旋转的时候,让它们执行一下spin_init()即可。
这里在alarm[0]中写入:
spin_init();
最后在create中写入:
alarm[0]=50;
这样能转的obj就搞定了,把它扔一堆到房间里面都没问题。
值得注意的是,如果在旋转之后还有其他事件(例如扩散、收缩、飞向player之类),必须将spin设置为0停止旋转,否则obj的坐标会在step事件中被一直限制。
2014年08月24日 15点08分 4
level 11
Nikaple 楼主
扩展:
利用上面两个代码做出旋转的效果很轻松了,但还有更多的可发挥空间。
实例①:
将step中代码改为:
if spin{
spin_around(400,304,len,dir,dirspd);
dirspd += 0.1;
}
并在create中写入:
dirspd = 5;
即可达到越转越快的效果。
同理,对len这个变量进行同样的操作,可以达到将图形放大或缩小的效果。
实例②:
将Alarm 0中的代码改为:
spin_init();
lenspd = len / 100;
将step中的代码改为:
if spin{
spin_around(400,304,len,dir,dirspd);
len += lenspd;
}
如果想让图形保持外形缩小的话,则需要将len改变的速率设置为跟len值正相关的一个数(相似图形原理),也就是lenspd = len / (一个常数)。这个常数根据当前图形大小来决定,一般来说试试就行了。
实例③:
将Alarm 0 中的代码改为:
spin_init();
ll = len; //记录初始值
将step中的代码改为:
if spin{
spin_around(400,304,len,dir,dirspd);
len = ll + len/3*sin(t);
t += 0.1;
}
利用sin函数让半径周期性放大缩小...Zzz是时候组织一波睡觉了∠( ‘・ω・)/
2014年08月24日 15点08分 5
@332382229 为什么左右都有len
2017年05月02日 14点05分
@332382229 那我可能是瞎写的 应该是len=ll+ll/3*sin(t)
2017年05月02日 14点05分
level 8
[真棒]好评如潮
2014年08月24日 15点08分 6
level 11
[喷] 虽然看不懂但我还是看了一遍
学术果老板
2014年08月25日 05点08分 7
level 12
虽然很不错 但是不得不fapple
2014年08月25日 12点08分 8
[haha][乖][OK]一切都是手滑..手滑而已!
2014年08月25日 13点08分
level 3
一赞
2014年12月07日 11点12分 11
level 13
太高端 不明白
2014年12月08日 12点12分 12
level 12
顶一下
2015年01月09日 12点01分 13
level 12
一楼赞
2015年01月11日 03点01分 14
level 3
逻辑清晰,论述简洁!可惜我看不懂\("▔□▔)/膜拜之
2015年01月16日 07点01分 15
level 1
2015年02月10日 13点02分 16
level 1
表示不解,我完全是这么来的呀
2015年02月11日 02点02分 17
你没有搞好需要的脚本 看3L
2015年02月11日 04点02分
level 1
可是我有弄脚本啊[啊]是不是我哪里搞错了
2015年02月11日 06点02分 18
名字里面为啥有括号 x y那是告诉你参数是什么的
2015年02月11日 08点02分
啊 虽然是我写错了 这好歹也是常识..
2015年02月11日 08点02分
@Nikaple (⊙o⊙)…以前没弄过脚本,不知道格式
2015年02月11日 08点02分
@-NIHIL- 啥 苹果阵难道不是圆的吗
2015年02月11日 13点02分
level 10
好强
2015年07月28日 01点07分 21
1