I got a problem with ascent loops, for what I saw, anything created in an ascent loop can only be referenced inside the same loop which brings a problem when I try to make for example a ring of bullets that will create bullets at the border of the screen.
task ay()
{
let bulletX = ObjMove_GetX(objEnemy);
let bulletY = ObjMove_GetY(objEnemy);
let density = 16;
let a = 0;
ascent(i in 0..density)
{
let bulletObj=CreateShotA1(bulletX, bulletY, 2,a,375, 10);
a += 360/density;
ObjMove_AddPatternA1(bulletObj,20,2,a-30-ang);
ObjMove_AddPatternA3(bulletObj,40,2,a+30-ang,NO_CHANGE,0,2,379);
ObjMove_AddPatternA1(bulletObj,60,2,a-30-ang);
ObjMove_AddPatternA3(bulletObj,80,2,a+30-ang,NO_CHANGE,0,2,376);
ObjMove_AddPatternA1(bulletObj,100,2,a-30-ang);
ObjMove_AddPatternA3(bulletObj,120,2,a+30-ang,NO_CHANGE,0,2,376);
ObjMove_AddPatternA1(bulletObj,140,2,a-30-ang);
ObjMove_AddPatternA3(bulletObj,160,2,a+30-ang,NO_CHANGE,0,2,378);
ObjMove_AddPatternA1(bulletObj,180,2,a-30-ang);
ObjMove_AddPatternA3(bulletObj,200,2,a+30-ang,NO_CHANGE,0,2,380);
while(!Obj_IsDeleted(bulletObj)){
if (ObjMove_GetX(bulletObj)<=GetStgFrameLeft+2 && ObjMove_GetX(bulletObj)>=GetStgFrameLeft-2){
CreateShotA1(ObjMove_GetX(bulletObj), ObjMove_GetY(bulletObj), 2,rand(-45,45),375, 10);
}
if (ObjMove_GetX(bulletObj)>=GetStgFrameWidth-2 && ObjMove_GetX(bulletObj)<=GetStgFrameWidth+2){
CreateShotA1(ObjMove_GetX(bulletObj), ObjMove_GetY(bulletObj), 2,rand(135,225),375, 10);
}
if (ObjMove_GetY(bulletObj)<=GetStgFrameTop+2 && ObjMove_GetY(bulletObj)>=GetStgFrameTop-2){
CreateShotA1(ObjMove_GetX(bulletObj), ObjMove_GetY(bulletObj), 2,rand(135,45),375, 10);
}
yield;
}
}
}
This is part of what I'm using the loop, but as you see I need to check every frame if the bullet is touching the border of the screen. However adding a while makes the whole ascent loop to just execute once. How can I make it loop the required number of times? Or how can I make the task check every frame if the bullet is touching the border?