东方弹幕风吧 关注:264贴子:935
  • 4回复贴,共1

[求解]5个函数的用法

只看楼主收藏回复


CreateLaserB(参数:5)
   1) ID:自由に指定できる数値。このあとにSetLaserDataB、FireShot、AddShot関数に同じものを使う。
   2) レーザーの长さ
   3) レーザーの幅
   4) 画像
   5) 遅延时间(レーザーが実体化するまでの时间)
敌を中心として敌に付いて移动するレーザーを作制する関数。
このあとに、SetLaserDataBで动きを设定したあと、FireShotで発射させる。
特定の敌を中心とするため敌スクリプト専用です。
SetLaserDataB(参数:9)
   1) ID:CreateLaserBで指定したID。
   2) 轨道を変化させるフレーム(FireShot后の経过フレーム)
   3) 长さの変化量
   4) 敌の中心からレーザー源までの距离(NULLを指定することで现在の値を引き継ぐ)
   5) 敌の中心からレーザー源までの距离の1フレームあたりの変化量
   6) 敌の中心からレーザー源までの角度(NULLを指定することで现在の値を引き継ぐ)
   7) 敌の中心からレーザー源までの角度の1フレームあたりの変化量
   8) レーザーの角度(NULLを指定することで现在の値を引き継ぐ)
   9) レーザーの角度の1フレームあたりの変化量
レーザーの动きを设定する関数。
1つのレーザーに何回も行うことができ、何度でも动きを変化させられる。
(0フレーム目の设定だけは行ってください)
CreateLaserC(参数:7)
   1) ID:自由に指定できる数値。このあとにSetLaserDataC、FireShot、AddShot関数に同じものを使う。
   2) x(レーザーを设置する绝対x坐标)
   3) y(レーザーを设置する绝対y坐标)
   4) レーザーの幅
   5) 残像を引くフレーム数(大きいほど长いレーザーになる。32程度。)
   6) 画像
   7) 遅延时间(レーザーが実体化するまでの时间)
曲げられる射出型レーザーを作制する関数。
このあとに、SetLaserDataCで动きを设定したあと、FireShotで発射させる。
ただし他の弾、レーザーに比べて重いです。
长くなるほど重くなります。
SetLaserDataC(参数:7)
   1) ID:CreateLaserCで指定したID。
   2) 轨道を変化させるフレーム(レーザー実体化后の経过フレーム)
   3) 速度(NULLを指定することで现在の値を引き継ぐ)
   4) 角度(NULLを指定することで现在の値を引き継ぐ)
   5) 角速度(1フレームあたりの角度変化量)
   6) 加速度(1フレームあたりの速度変化量)
   7) 最大速度(最低速度)
レーザーの动きを设定する関数。
1つのレーザーに何回も行うことができ、何度でも动きを変化させられる。
(0フレーム目の设定だけは行ってください)
AddShot(参数:4)
   1) 加えられた弾を放出するフレーム
   2) 追加先の弾(レーザー)ID
   3) 追加元の弾(レーザー)ID
   4) 弾を放出するレーザー源からの距离(追加先がレーザーでない场合は无视される)
弾に弾を持たせる関数。
使用すると追加元のID弾(レーザー)の设定は消灭する。
弾を分裂させたり、敌弾を出す敌弾を作制する场合に用いる。
レーザーから弾を出したい场合にも、用いることができる(禁忌「レーヴァテイン」等)。
同じ弾に対して何度も実行でき、别弾を持たせた弾を别弾にもたせることもできる(说明しづらい…)。


IP属地:广东1楼2010-05-29 19:43回复
    只在重要的参数后加上说明
    因为不懂日文,所以只是摸索后的理解,有错还请指正
    ==
    CreateLaserB(参数:5)
       1) ID:自由に指定できる数値。このあとにSetLaserDataB、FireShot、AddShot関数に同じものを使う。
       2) レーザーの长さ
    激光长度(初始长度)
       3) レーザーの幅
    激光宽度
       4) 画像
       5) 遅延时间(レーザーが実体化するまでの时间)
    SetLaserDataB(参数:9)
       1) ID:CreateLaserBで指定したID。
       2) 轨道を変化させるフレーム(FireShot后の経过フレーム)
       3) 长さの変化量
    (激光)长度的变化量
       4) 敌の中心からレーザー源までの距离(NULLを指定することで现在の値を引き継ぐ)
    激光源和敌人的距离 (敌人指的即是射出这条激光的敌人)
       5) 敌の中心からレーザー源までの距离の1フレームあたりの変化量
    激光源和敌人的距离变化量
       6) 敌の中心からレーザー源までの角度(NULLを指定することで现在の値を引き継ぐ)
    激光源和敌人的角度
       7) 敌の中心からレーザー源までの角度の1フレームあたりの変化量
    激光源和敌人的角度变化量
       8) レーザーの角度(NULLを指定することで现在の値を引き継ぐ)
    激光的角度
       9) レーザーの角度の1フレームあたりの変化量
    激光的角度変化量
    ==
    LaserB可看作以随时以敌人为原点,用距离和角度表示(激光源)位置的激光
    因此没有所谓的发射速度和发射角度
    激光本身的长度和角度都可随意改变
    出界不会自行消灭,记得配合SetShotKillTime使用
    ==
    CreateLaserC(参数:7)
       1) ID:自由に指定できる数値。このあとにSetLaserDataC、FireShot、AddShot関数に同じものを使う。
       2) x(レーザーを设置する绝対x坐标)
       3) y(レーザーを设置する绝対y坐标)
       4) レーザーの幅
    激光宽度
       5) 残像を引くフレーム数(大きいほど长いレーザーになる。32程度。)
    不解,暂时当作激光长度
       6) 画像
       7) 遅延时间(レーザーが実体化するまでの时间)
    SetLaserDataC(参 数:7)
       1) ID:CreateLaserCで指定したID。
       2) 轨道を変化させるフレーム(レーザー実体化后の経过フレーム)
       3) 速度(NULLを指定することで现在の値を引き継ぐ)
       4) 角度(NULLを指定することで现在の値を引き継ぐ)
       5) 角速度(1フレームあたりの角度変化量)
       6) 加速度(1フレームあたりの速度変化量)
       7) 最大速度(最低速度)
    其实这里跟SetShotDataA一样...
    ==
    LaserC就是东方星莲船大量出现,扭来扭去的雷射(只是丑很多)
    想像激光只是拖长的子弹,再对照SetShotDataA,应该不难懂
    ==
    AddShot(参数:4)
       1) 加えられた弾を放出するフレーム
    子弹2的发射时间(从子弹1发射后计时)
       2) 追加先の弾(レーザー)ID
    子弹1的ID (子弹1发射子弹2)
       3) 追加元の弾(レーザー)ID
    追加2的ID
       4) 弾を放出するレーザー源からの距离(追加先がレーザーでない场合は无视される)
    不解,暂时设为0
    ==
    以上面的子弹1和子弹2来说
    子弹2发射瞬间会以子弹1所在位置为原点(类似COODINATE_TYPE_PARENT)
    也就是说一般都会设子弹2的初始x、y座标为0
    这样才会看到子弹2从子弹1身上发射出来
    可看作使子弹发射子弹(追加弹)的函数
    有 ID的子弹都可以拿来追加(LaserB除外,因为它不会以子弹为原点)
    也可以多层追加,像是子弹1发射子弹2、子弹2又发射子弹3
    用途很多的函数
    


    IP属地:中国台湾2楼2010-05-30 22:00
    回复
      附上一个范例
      shot1是LaserB的例子
      shot2是LaserC的例子
      shot3、4是AddShot的例子
      主要看这些就好
      #TouhouDanmakufu
      #Title[Sample]
      #Text[Sample]
      #Image[]
      #ScriptVersion[2]
      script_enemy_main
      {
          @Initialize
          {
              SetLife(1000);
              LoadGraphic("script\img\ExRumia.jpg");
              SetGraphicRect(64,1,127,64);
              SetEnemyMarker( true );
             
              main;
          }
             
          @MainLoop
          {
              SetCollisionA(GetX(),GetY(),32);
              SetCollisionB(GetX(),GetY(),24);
              yield ;
          }
         
          @DrawLoop
          {
              SetTexture("script\img\ExRumia.jpg");
              DrawGraphic(GetX(),GetY());
          }
         
          @Finalize
          {
              DeleteGraphic("script\img\ExRumia.jpg");
          }
         
          task main
          {
              SetMovePosition02(GetCenterX,120,60);
              wait(180);
              loop {
                  shot1;
                  wait_and_move;
                  shot2;
                  wait_and_move;
                  shot3;
                  wait_and_move;
                  shot4;
                  wait_and_move;
              }
          }
         
          sub wait_and_move {
              wait(180);
              SetMovePositionRandom01(rand(64,128),rand(0,64),2,GetClipMinX+64,GetClipMinY+64,GetClipMaxX-64,GetClipMaxY-64);
              wait(180);
          }
         
          task shot1 {
              let way=8;
              let r=rand(0,360);
              let id=0;
              ascent (i in 0..way) {
                  CreateLaserB(id,12,14,BLUE11,10);
      


      IP属地:中国台湾3楼2010-05-30 22:07
      回复
                    SetLaserDataB(id,0,2,10,1,r+360/way*i,0.5,r+360/way*i,0.5);
                    SetLaserDataB(id,180,-2,NULL,-1,NULL,0.5,NULL,0.5);
                    SetShotKillTime(id,360);
                    FireShot(id);
                }
            }
           
            task shot2 {
                let way=12;
                let r=rand(0,360);
                let id=0;
                ascent (i in 0..way) {
                    CreateLaserC(id,GetX,GetY,10,64,YELLOW02,10);
                    SetLaserDataC(id,0,2,r+360/way*i,-3,5/180,7);
                    SetLaserDataC(id,180,NULL,NULL,0,0,7);
                    FireShot(id);
                }
            }
            task shot3 {
                let id=0;
                let id2=1;
                let r=rand(0,360);
                CreateShotA(id,GetX,GetY,10);
                SetShotDataA(id,0,2,GetAngleToPlayer,0,0,0,GREEN02);
                ascent (i in 0..30) {
                    CreateShotA(id2,0,0,0);
                    SetShotDataA(id2,0,1,r+i*12,0,0,0,GREEN01);
                    AddShot(10+i*5,id,id2,100);
                }
                FireShot(id);
            }
           
            task shot4 {
                let way=12;
                let way2=16;
                let r=rand(0,360);
                let r2=rand(0,360);
                let id=0;
                let id2=1;
                ascent (i in 0..way) {
                    CreateShotA(id,GetX,GetY,10);
                    SetShotDataA(id,0,5,r+360/way*i,0,-5/60,0,RED02);
                    SetShotKillTime(id,60);
                    ascent (j in 0..way2) {
                        CreateShotA(id2,0,0,10);
                        SetShotDataA(id2,0,2,r2+360/way2*j,0,0,0,RED01);
                        AddShot(60-1,id,id2,0);
                    }
                    FireShot(id);
                }
            }
           
            function wait( let waittime) {
                loop (waittime) { yield ; }
            }
        }


        IP属地:中国台湾4楼2010-05-30 22:07
        收起回复