Skocz do zawartości

Problem z draw_getpixel


Rekomendowane odpowiedzi

Siema! Mam obiekt o_kontroler i mam w nim kod:

CREATE:

GML
global.projekt = get_string('Podaj nazwę projektu','')

plik = get_open_filename("Plik NPG|*.png","Projekt")

if plik != ''{

global.obrazek = sc_wczytajgr(plik)

szer = sprite_get_width(global.obrazek)

wys = sprite_get_height(global.obrazek)

a1 = szer*32

a2 = wys*32

}

else{

game_end()

}

DRAW:

GML
draw_sprite(global.obrazek,0,a1,0)

for(i = 0; i<=szer; i+=1)

{

for(j = 0; j<=wys; j+=1)

{

var a;

a = draw_getpixel(a1+i,j)

switch(a)

{

case c_blue: instance_create(i*32,j*32,object1); break;

case c_white: instance_create(i*32,j*32,object2); break;

case c_green: instance_create(i*32,j*32,object3); break;

default: break;

}

}

}

Mam takie pytanko: Jak wczytuję sobie obrazek to czemu nie tworzą się obiekty?

Odnośnik do komentarza
Udostępnij na innych stronach

[offtopic]Używałem tego sposobu i wolalem korzystać z surface aniżeli zaśmiecać ekran[/offtopic], natomiast skąd pewność, że wartość c_blue czy c_green to jest dokładnie ten sam odcień z tą samą wartością, którą narysowałeś?

Paintowy niebieski, na ten przykład, to nie (0,0,255) tylko (63,72,204)

Odnośnik do komentarza
Udostępnij na innych stronach

Zrób sobie debug:

GML
draw_sprite(global.obrazek,0,a1,0)

for(i = 0; i<=szer; i+=1)

{

for(j = 0; j<=wys; j+=1)

{

var a;

a = draw_getpixel(a1+i,j)

show_debug_message(string(a));

switch(a)

{

case c_blue: instance_create(i*32,j*32,object1); break;

case c_white: instance_create(i*32,j*32,object2); break;

case c_green: instance_create(i*32,j*32,object3); break;

default: break;

}

}

}

 

c_blue przyjmuje wartość 16711680

white 16777215

green 32768

 

Zobacz jakie wartości ci pokaże debugger

 

kolory są rozpisane w sekcji "Colour And Blending" w helpie

Odnośnik do komentarza
Udostępnij na innych stronach

No to już wiesz w czym jest problem. Po prostu to inne kolory.

 

A poza tym:

GML
draw_sprite(global.obrazek,0,a1,0)

for(i = 0; i<=szer; i+=1)

{

for(j = 0; j<=wys; j+=1)

{

(...)

a = draw_getpixel(a1+i,j)

(...)

}

}

Żebyś się palił w piekle za wsadzenie tego do draw.
Odnośnik do komentarza
Udostępnij na innych stronach

A znasz lepszy sposób na wczytanie obrazka i pobieranie pikseli 'piksel po pikselu'?

Zrobienie to raz i na surface. Poza tym pewnie rozbiłbym to na wiele step. Dzięki temu nie było by jednej wielkiej zwiechy, można by dodać akcję przerwania (esc), a nawet pobawić się z paskami postępu.

Chcesz to zaraz skleję jakiś przykład.

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra, problem rozwiązany. Po prostu złe kolory były w obrazku i ten obrazek był poza roomem. Teraz kodzik wygląda tak:

CREATE:

GML
global.projekt = get_string('Podaj nazwę projektu','')

plik = get_open_filename("Plik PNG|*.png","")

if plik != ''{

global.xblokow = ds_list_create()

global.yblokow = ds_list_create()

global.najx = ds_list_create()

global.najy = ds_list_create()

global.obrazek = sc_wczytajgr(plik)

szer = sprite_get_width(global.obrazek)

wys = sprite_get_height(global.obrazek)

otwarty=0

}

else{

game_end()

}

DRAW:

GML
draw_sprite(global.obrazek,0,0,0)

if otwarty=0

{

for(i = 0; i<=szer; i+=1)

{

for(j = 0; j<=wys; j+=1)

{

var a,x1,y1;

a = draw_getpixel(i,j)

x1=768+(i*32)

y1=j*32

switch(a)

{

case rgb(255,0,0): instance_create(x1,y1,obj_id0) break;

//I tak dalej

}

}

}

otwarty=1

}

draw_sprite(spr_Bloki,0,mouse_x,mouse_y)

funkcja rgb to po prostu skrócona wersja make_color_rgb

Odnośnik do komentarza
Udostępnij na innych stronach

Miałem to zrobić wcześniej, ale nie miałem czasu wczoraj. Są błędy w obliczaniu paska postępu i nie chce mi się się tracić więcej czasu na to. Masz baw się: https://gmclan.org/up3900_4_surface_getpixel.html

Odnośnik do komentarza
Udostępnij na innych stronach

Miałem to zrobić wcześniej, ale nie miałem czasu wczoraj. Są błędy w obliczaniu paska postępu i nie chce mi się się tracić więcej czasu na to. Masz baw się: https://gmclan.org/up3900_4_surface_getpixel.html

 

My się chyba nie zrozumieliśmy. Mój kod miał tworzyć obiekty przypisane do danego koloru

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ę...