~Hakurei Shrine~ > Rika and Nitori's Garage Experiments
※ Danmakufu Q&A/Problem thread 3 ※
Helepolis:
Welcome to the Question and Answer (or any problem/help me) thread for Danmakufu
Important notice (26-04-2016): This thread will function as the general Danmakufu Q&A from this point on
As we all know, 0.12m is heavily outdated. It has become ancient :V So far, we've been keeping two threads to help people with their questions or problems. However, Ph3 is no longer considered scary or difficult as we got a skilled community with various people to help out. It is time to move on and leave 0.12m alone.
If you have 0.12m questions (because of old scripts and such), feel free to ask them in here.
* Previous thread: https://www.shrinemaiden.org/forum/index.php/topic,16584.0.html
* Danmakufu Wiki: http://dmf.shrinemaiden.org/wiki/Main_Page
* The Great information thread: http://www.shrinemaiden.org/forum/index.php/topic,6181.0.html
Helepolis:
Last ongoing question by Zhan_Fox which had started here. Below a guote from the last post.
--- Quote from: Zhan_fox on January 30, 2016, 09:33:50 AM ---Oh, Sorry my English is not clear?
I want to connect two objects (like for example GetObjectDistance(obj1,obj2) ), but both objects are in different loop making rings. With SetCommonData (as you said before) I have no imagination how could I do that.
--- End quote ---
Drake:
I was waiting for an elaboration because I'm pretty sure my last post needed a concrete example.
--- Code: ---let listA = [];
let listB = [];
// note that this is specifically a function, which creates and sets up a single object we want
function ObjectA(y){
// create and initialize the object
let objA = CreateShotA1(20, y, 1, 25, DS_BALL_S_RED, 20);
// task *within* a function, which keeps running even when the function returns
task DoStuffA(){
// running loop
while(!Obj_IsDeleted(objA)){
// in this example, A bullets change color when they collide with B bullets
let collision = false;
ascent(i in 0..length(listB)){
if(GetObjectDistance(objA, listB[i]) < 20){
ObjShot_SetGraphic(objA, DS_BALL_S_BLUE);
collision = true;
break;
}
}
if(!collision){
ObjShot_SetGraphic(objA, DS_BALL_S_RED);
}
yield;
}
}
// run the above task
DoStuffA();
// return the object ID you just created to store it in a variable with higher scope
return objA;
}
// similar to above
function ObjectB(y){
let objB = CreateShotA1(364, y, 1, 155, DS_BALL_S_RED, 20);
task DoStuffB(){
while(!Obj_IsDeleted(objB)){
let collision = false;
ascent(i in 0..length(listA)){
if(GetObjectDistance(objB, listA[i]) < 20){
ObjShot_SetGraphic(objB, DS_BALL_S_BLUE);
collision = true;
break;
}
}
if(!collision){
ObjShot_SetGraphic(objB, DS_BALL_S_RED);
}
yield;
}
}
DoStuffB();
return objB;
}
ascent(i in 0..10){
listA = listA ~ [ ObjectA(20+i*20) ]; // creates ten of the ObjectA bullets
listB = listB ~ [ ObjectB(20+i*20) ]; // creates ten of the ObjectB bullets
loop(10){yield;}
}
--- End code ---
There are better ways to code this particular example, but hopefully this illustrates my previous post. Note that both A objects and B objects are created in different function scopes and have different behaviour, but still reference each other. The functions that create the objects return their IDs, so you can store the object IDs using variables declared in higher scopes (so they're more accessible). The tasks within each function still run independently of each other, even though the function surrounding it returns.
Jean Fox:
--- Quote from: Drake on January 31, 2016, 07:52:25 AM ---I was waiting for an elaboration because I'm pretty sure my last post needed a concrete example.
--- Code: ---let listA = [];
let listB = [];
function ObjectA(y){
let objA = CreateShotA1(20, y, 1, 25, DS_BALL_S_RED, 20);
task DoStuffA(){
while(!Obj_IsDeleted(objA)){
let collision = false;
ascent(i in 0..length(listB)){
if(GetObjectDistance(objA, listB[i]) < 20){
ObjShot_SetGraphic(objA, DS_BALL_S_BLUE);
collision = true;
break;
}
}
if(!collision){
ObjShot_SetGraphic(objA, DS_BALL_S_RED);
}
yield;
}
}
DoStuffA();
return objA;
}
function ObjectB(y){
let objB = CreateShotA1(364, y, 1, 155, DS_BALL_S_RED, 20);
task DoStuffB(){
while(!Obj_IsDeleted(objB)){
let collision = false;
ascent(i in 0..length(listA)){
if(GetObjectDistance(objB, listA[i]) < 20){
ObjShot_SetGraphic(objB, DS_BALL_S_BLUE);
collision = true;
break;
}
}
if(!collision){
ObjShot_SetGraphic(objB, DS_BALL_S_RED);
}
yield;
}
}
DoStuffB();
return objB;
}
ascent(i in 0..10){
listA = listA ~ [ ObjectA(20+i*20) ]; // creates ten of the ObjectA bullets
listB = listB ~ [ ObjectB(20+i*20) ]; // creates ten of the ObjectB bullets
loop(10){yield;}
}
--- End code ---
There are better ways to code this particular example, but hopefully this illustrates my previous post. Note that both A objects and B objects are created in different function scopes and have different behaviour, but still reference each other. The functions that create the objects return their IDs, so you can store the object IDs using variables declared in higher scopes (so they're more accessible). The tasks within each function still run independently of each other, even though the function surrounding it returns.
--- End quote ---
WOW! IT'S WORKING!
I never would have guessed to do like that.
Thank you! My superhero!
Lollipop:
2 questions.
1. How to do a magic circle (the circles that spin around the boss)
2. How to spawn familiars
Navigation
[0] Message Index
[#] Next page
Go to full version