Skocz do zawartości

dodać na koniec kodu skrypt ?


Marek.S

Rekomendowane odpowiedzi

Hej.

Tak się ostatnio zastanawiam...

robiłem komuś przykład rysowania lini w gm, i z tąd moje pytanie.

Rysuje linie w draw za pomocą draw_line w pozycji start x i y oraz end x i y

chcę nakreślić druga linie

i czy jest możliwość dodania do końca kodu kolejną linijkę skryptu

 

np draw_line(x_start,y_start,x_end,y_end)

 

i przy jakimś evencie na sam koniec chce dodać kolejne

 

draw_line(x_start,y_start,x_end,y_end)

 

w efekcie:

draw_line(x_start,y_start,x_end,y_end)

draw_line(x_start,y_start,x_end,y_end)

 

 

czy jest taka funkcja w gm ?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli nie chcesz tych linii za wiele rysować to zrób dla każdej linii oddzielny obiekt. Bo podejrzewam, że zrobiłeś tylko jeden obiekt do rysowania ze skryptem w evencie Draw:

draw_line(x_start,y_start,x_end,y_end)

 

Proponuję zrobić oddzielne dwa obiekty.

 

obiekt 1

Będzie tworzył obiekt 2 w (mouse_x,mouse_y) w momencie gdy zostanie naciśnięta globalnie mysz (global left pressed)

 

obiekt 2

kluczowy obiekt

 

Event Create

x_start=mouse_x
y_start=mouse_y
gotowa=false

zmienna "gotowa" mówi, czy linia jest już gotowa ;)

 

Event Step

if gotowa=false
{
x_end=mouse_x
y_end=mouse_y
}

Jeśli nie jest gotowa (przycisk nie został puszczony) to linia jest wciąż rysowana do punktu gdzie znajduje się kursor myszy

 

Global Left Released

gotowa=true

Linia gotowa :)

 

i jeszcze event Draw

draw_set_color(c_black)
draw_line(x_start,y_start,x_end,y_end)

 

Wszystko działa, tu masz przykład:

https://gmclan.org/up2782_11_the_linia_paint.html

 

Jeśli nie chodziło ci o "paintowanie" to użyj poprostu sposobu, że każdy obiekt to linia. Bo rozumiem, że twoim problemem było, że gdy rysowałeś następną to poprzednia znikała? :hmmm:

Odnośnik do komentarza
Udostępnij na innych stronach

On chce, że jak zwolnisz klawisz myszy to jest nowa linia. Są dwa sposoby.

 

1 sposób:

 

Create:

sur = surface_create(room_width, room_height);
x_start = 0;
y_start = 0;
x_end = 0;
y_end = 0;
klik = false;

Step:

if mouse_check_button(mb_left)
{
  x_end = mouse_x;
  y_end = mouse_y;
}

if mouse_check_button_pressed(mb_left)
{
  x_start = mouse_x;
  y_start = mouse_y;
  klik = true;
}

if mouse_check_button_released(mb_left) && (klik)
{
  surface_set_target(sur);
  draw_line(x_start, y_start, x_end, y_end);
  surface_reset_target();
  klik = false;
}

Draw:

draw_surface(sur, 0, 0);
if (klik) draw_line(x_start, y_start, x_end, y_end);

Popraw ewentualne błędy. ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Mu chyba chodzi o to żeby dodać podczas gry akcje do eventa.

 

Kawałek helpa:

object_event_add(ind,evtype,evnumb,codestr) To give the object a behavior we must define events for the object. You can only add code actions to events. You need to specify the object, the event type, the event number (use the constants that have been specified before for the event_perform() function). Finally you provide the code string that must be executed. You can add multiple code actions to each event.

object_event_clear(ind,evtype,evnumb) You can use this function to clear all the actions for a particular event.

Nie chciało mi sie przetłumaczać

Odnośnik do komentarza
Udostępnij na innych stronach

Oj, już nie mów jak nie wiesz, oki ? Tylko posty zbędne nabijasz. A żeby nie było offtopu, zaraz editnę posta i napiszę drugi sposób.

 

2 Sposób

 

Create:

lines = 0;

Draw:

if mouse_check_button_pressed(mb_left)
{
  lines += 1;
  start_x[lines] = mouse_x;
  start_y[lines] = mouse_y;
}

if mouse_check_button(mb_left)
{
  end_x[lines] = mouse_x;
  end_y[lines] = mouse_y;
}


for( i = 0; i < lines; i += 1; )
{
  draw_line( start_x[i], start_y[i], end_x[i], end_y[i] );
}

if (lines > 0) draw_line( start_x[lines], start_y[lines], end_x[lines], end_y[lines] );

Wystarczyło tylko pomyśleć ;) .

Odnośnik do komentarza
Udostępnij na innych stronach

Dodawanie (podczas gry) na końcu eventa Draw dla wszystkich obiektów Jakiśobiekt funkcji rysującej linię:

object_event_add ( jakiśobiekt , ev_draw , 0 , 'draw_line(x1,y1,x2,y2);' );

A jak chcesz całkiem usunąć zdarzenie draw (wszystkie akcje i kody jakie w sobie miał też) to piszesz:

object_event_clear ( jakiśobiekt , ev_draw , 0 );

 

@UP:

Ten drugi sposób nie zadziała jak on zrobi kilka viewów, bo wtedy zdarzenie draw jest puszczane kilka razy na klatke.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...