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

【求助】求说明task、yield的用法

只看楼主收藏回复

看了很多教学都一头雾水,
能有人来帮忙解释一下吗?


1楼2013-11-09 12:46回复
    碰到一个 task 调用后进入 task;
    在 task 中碰到 yield 回到调用 task 的下一行;
    再次碰到 yield,回到之前跳出的那个 task 中 yield 的下一行;
    task 执行完毕,回到跳回 task 的那个 yield 的下一行。


    2楼2013-11-10 15:21
    收起回复
      #TouhouDanmakufu
      #Title[TaskTest]
      #Text[Task test.]
      #Player[FREE]
      #ScriptVersion[2]
      script_enemy_main
      {
      let imgExRumia = "script\ExRumia\img\ExRumia.png";
      let frame = 0;
      @Initialize
      {
      SetX(GetCenterX);
      SetY(GetClipMinY + 120);
      SetLife(4000);
      LoadGraphic(imgExRumia);
      }
      @MainLoop
      {
      SetCollisionA(GetX, GetY, 32);
      SetCollisionB(GetX, GetY, 20);
      frame++;
      if(90 == frame)
      {
      shot(GetX, GetY);
      }
      if(120 == frame)
      {
      CreateShot01(GetX, GetY, 8, GetAngleToPlayer()-5, BLUE04, 0);
      CreateShot01(GetX, GetY, 8, GetAngleToPlayer()+5, BLUE04, 0);
      }
      if(180 == frame)
      {
      yield;
      frame = 0;
      }
      }
      @DrawLoop
      {
      SetTexture(imgExRumia);
      SetGraphicRect(64, 1, 127, 64);
      DrawGraphic(GetX, GetY);
      }
      @Finalize
      {
      DeleteGraphic(imgExRumia);
      }
      task shot(let x, let y)
      {
      CreateShot01(x, y, 8, GetAngleToPlayer()-10, BLUE03, 0);
      CreateShot01(x, y, 8, GetAngleToPlayer()+10, BLUE03, 0);
      yield;
      CreateShot01(x, y, 8, GetAngleToPlayer(), RED03, 0);
      }
      }


      3楼2013-11-10 15:25
      回复
        @_冰冻世界_,**


        IP属地:江苏4楼2017-08-16 15:38
        回复