Ostatnio dużo rzeczy robię i zapomniałem o gmc, a trochę problemów się nazbierało. Przed chwilą sobie myślę: co tu zrobić z tym.. a od czego forum?! No to wam palnę niektóre z nich w kolejności od najważniejszego w dół:
1. [Problem (skrypt)] del_obj()
Zrobiłem sobie taki system obiektów do programu Easy Outline Maker (każdy punkt, linia i inne to obiekty w moim systemie).
No i teraz napisałem skrypt del_obj() i nie działa. Zmienne: objnum - ilość obiektów, _td - to delete; id obiektu do usuniecia.
GML
var _td;
_td=argument0;
if objnum<_td
{
return 0;
}
else
{
if objnum=_td objnum-=1;
else
{
for(i=_td; i<=objnum; i+=1)
{
if i=objnum break;
obj[i,type]=obj[i+1,type];
obj[i,x1]=obj[i+1,x1];
obj[i,y1]=obj[i+1,y1];
obj[i,x2]=obj[i+1,x2];
obj[i,y2]=obj[i+1,y2];
obj[i,name]=obj[i+1,name];
obj[i,idd]=obj[i+1,idd];
obj[i,chck]=obj[i+1,chck];
}
return 1;
}
}
2. [Problem (skrypt)] draw_line_size()
Naszła mnie chęć na napisanie skryptu rysującego linie o podanej grubości, aczkolwiek przydała by mi się do EOM, lecz ten mój twór nie działa.
GML
/*
Rysuje linie o danej grubosci.
argument0 - x1
argument1 - y1
argument2 - x2
argument3 - y2
argument4 - grubosc
*/
var _x1,_y1,_x2,_y2,_size,_dir;
_x1=argument0;
_y1=argument1;
_x2=argument2;
_y2=argument3;
_size=argument4;
for(i=0; i<=_size; i+=1)
{
_dir=point_direction(x1,y1,x2,y2);
draw_line(x1+lengthdir_x(i,_dir-90),y1+lengthdir_y(i,_dir-90),x2+lengthdir_x(i,_dir-90),y2+lengthdir_y(i,_dir-90))
draw_line(x1+lengthdir_x(i,_dir+90),y1+lengthdir_y(i,_dir+90),x2+lengthdir_x(i,_dir+90),y2+lengthdir_y(i,_dir+90))
}
3. [Pytanie (funkcja)] show_menu()
Czy są jakieś dodatki do show_menu(), żeby na przykład zrobić szary/zablokowany przycisk w menu? Albo może są dll-e/skrypty mające takie coś (nie chcę winapi do gm-a).
4. [Problem (funkcja && zmienne wbudowane)] collision_line() && x/y previous
Dajmy na to, że mam sobie obj_bullet. W create: speed=50;, a w step: if collision_line(xprevious,yprevious,x,y,obj_wrog,1,1)!=noone obj_wrog.hp-=5;.
Powyższy kod nie działa, tzn działa, ale nie do końca, bo działa tak jak zwykła kolizja - jak wypadnie, że w to miejsce skoczy co stoi obj_wrog to mu hp zabierze. Czemu?
5. [Problem/Pytanie (pętla)] for
O co w tym chodzi cholipka?!
Nie wiem czy w gm7 inaczej pętla for działała niż w gm7 czy co, bo np takie coś:
GML
log=0;
for(i=0; i<5; i+=1) //i=0, jezeli i<5 to i+=1 i wykonac to ponizej, tak??
{
//<to ponizej odwolujac sie do powyzej :P>
log+=1;
}
show_message(string(log));
Doliczyło 5.
A teraz:
GML
log=0;
for(i=0; i<5; i+=1) //i=0, jezeli i<5 to i+=1 i wykonac to ponizej, tak??
{
//<to ponizej odwolujac sie do powyzej :P>
log+=1;
show_message(string(i));
}
Wyświetliło message-a 6 razy! Czyli kod wykonał się 6 razy, a pomimo to log=5?
Co to ma być?!
Edit: Dlatego też w powyższych kodach dawałem:
GML
/* Przykład */
for(i=1; i<=5; i+=1)
{
//instrukcja
}
Wszystko wina źle opisanej pętli 'for' w dokumentacji przez Tymona ;f