nikaple吧 关注:164贴子:2,320

任意形状的旋转系统

只看楼主收藏回复

一楼还是打老虎


IP属地:广东1楼2014-08-24 22:59回复
    旋转其实非常简单,在这里利用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;
    }


    IP属地:广东3楼2014-08-24 23:01
    回复
      在需要旋转的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事件中被一直限制。


      IP属地:广东4楼2014-08-24 23:01
      回复
        扩展:
        利用上面两个代码做出旋转的效果很轻松了,但还有更多的可发挥空间。
        实例①:
        将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是时候组织一波睡觉了∠( ‘・ω・)/


        IP属地:广东5楼2014-08-24 23:18
        收起回复
          好评如潮


          IP属地:上海6楼2014-08-24 23:32
          回复
            虽然看不懂但我还是看了一遍
            学术果老板


            IP属地:上海来自iPhone客户端7楼2014-08-25 13:26
            回复
              虽然很不错 但是不得不fapple


              IP属地:上海来自Android客户端8楼2014-08-25 20:11
              收起回复
                一赞


                IP属地:上海11楼2014-12-07 19:01
                回复
                  太高端 不明白


                  IP属地:重庆来自iPhone客户端12楼2014-12-08 20:04
                  回复
                    顶一下


                    IP属地:陕西来自Android客户端13楼2015-01-09 20:43
                    回复
                      一楼赞


                      IP属地:上海来自Android客户端14楼2015-01-11 11:19
                      回复
                        逻辑清晰,论述简洁!可惜我看不懂\("▔□▔)/膜拜之


                        IP属地:福建15楼2015-01-16 15:23
                        回复
                          @尼马孙爷


                          IP属地:广东来自Android客户端16楼2015-02-10 21:21
                          回复