Skocz do zawartości

Generator


Młody

Rekomendowane odpowiedzi

Zależy jaki rodzaj gry. Ja kiedyś robiłem generator planszy 1000x1000 przy czym plansza rysowana była na spricie 100x100 i obiekty były tworzone w zależności od koloru pixela na spricie ;D Najwięcej kodzenia było do tego żeby w miarę normalnie wyglądało ;D

Odnośnik do komentarza
Udostępnij na innych stronach

Rysujesz sobie kodem heightmape:

200px-Heightmap.png

Potem sprawdzasz odcień (im jaśniejszy tym wyżej) i stawiasz klocki. Proste?

 

EDIT:

@Młody: 1 możliwość zrobienia generatora napisałem wyżej.

adam, sry że pytam, ale jak sprawdzić w gm'ie odcień ? - nigdy tego nie widziałem w gm'ie prawdę mówiąc

Odnośnik do komentarza
Udostępnij na innych stronach

W ogóle oświeć mnie po kiego grzyba rysować wygenerowaną mapkę jako grafikę tylko po to żeby potem znowu czytać z niej kolory? : /

Taka tam konwersja [wartość] -> [kolor] -> [wartość], coby przypadkiem wszystko nie chodziło za szybko i żeby mieć pretekst do użycia draw_getpixel() bo to ogólnie bardzo fajna funkcja.

 

Normalnie liczysz sobie tą heightmape niech bedzie perlin noisem do tablicy i tyle, po co rysować to na ekran i znowu czytać z tego ekranu, chyba tylko po to żeby stracić fps i trochę na precyzji.

Odnośnik do komentarza
Udostępnij na innych stronach

No rozumiem , że jak nie będę miał nic to nic mi nie wygeneruje -_-

Chodzi mi o przykład generowania świata z 1/2(więcej) przedmiotów , tak na później , skończę kodzić silnik , bach , używam przykładziku i jedziemy dalej ;)

No ok , jak coś zrobię to powiem , OK ?

 

P.S. Ale grad !

P.S.S. Nie dawajcie warna jak napiszę post pod postem , bo to przecież będzie oznaczać , że już potrzebuję generatora ;)

 

Jak zrobić , żeby rysował siatkę 32x32 bo co tyle tworzę jeden obiekt ?

Odnośnik do komentarza
Udostępnij na innych stronach

Tak na szybko zrobiłem , chodzi mi o to wypadanie , jak je załapie to się zagłębie w eq ... to jest chyba nawet to od ciebie xD :

create :

GML
item=0

var i,j;

for (j=0;j<=7;j+=1;){

for (i=0;i<=3;i+=1;){

inventory[i,j] = 0 // pelny

inventory_stack[i,j] = 0 // Ilość przedmiotów

inventory_x[i,j] = x+1+(32*i)// x

inventory_y[i,j] = y+1+(32*j)// y

}

}

globalvar ds_obj_name;

ds_obj_name = ds_map_create();

Step :

GML
if item!=0{

item.x=mouse_x-(sprite_get_width(item.sprite_index)/2)

item.y=mouse_y-(sprite_get_height(item.sprite_index)/2)

}

Global Left Pressed :

 

GML
var i,j,temp;

temp=0

//łapanie itemu

if item=0 && collision_point(mouse_x,mouse_y,parent,1,1){

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if collision_mouse(inventory_x[i,j],inventory_y[i,j],inventory_x[i,j]+32,inventory_y[i,j]+32) {

if inventory_stack[i,j]>1 {

for (d=0; d<16384; d+=1){if object_exists(d) {ds_map_add(ds_obj_name,object_get_name(d),d)}}

temp=inventory[i,j]

item=instance_create(mouse_x,mouse_y,ds_map_find_value(ds_obj_name,string(object_get_name(temp.object_index))))

inventory_stack[i,j]-=1

temp=0

exit;

}else{

item=inventory[i,j]

item.visible=true

inventory[i,j]=0

inventory_stack[i,j]-=1

exit;

}}}}

item=collision_point(mouse_x,mouse_y,parent,1,1)

}

//dodawanie itemu

if item!=0 {

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if collision_mouse(inventory_x[i,j],inventory_y[i,j],inventory_x[i,j]+32,inventory_y[i,j]+32) {

if inventory[i,j]=0 { //jeśli kratka jest pusta wsadza item

inventory_stack[i,j]+=1

inventory[i,j]=item

item=0

exit;

}else{//jeśli jest stackowalny

if object_get_name(inventory[i,j].object_index)=object_get_name(item.object_index) {

inventory_stack[i,j]+=1

with (item) {instance_destroy()}

item=0

}

}}}}}

Draw :

draw_sprite(s_plecak,0,x,y);

var i,j;

for (j=0;j<=7;j+=1;){

for (i=0;i<=3;i+=1;){

if inventory[i,j]!=0 {

inventory[i,j].x=inventory_x[i,j]

inventory[i,j].y=inventory_y[i,j]

inventory[i,j].visible=false

draw_sprite(inventory[i,j].sprite_index,inventory[i,j].image_index,inventory_x[i,j],inventory_y[i,j])

if inventory_stack[i,j]>1 {

draw_set_font(font)

draw_set_color(c_white)

draw_text(inventory_x[i,j]+23,inventory_y[i,j]+10,string(inventory_stack[i,j]))

}

}}}

To był o_plecak

Odnośnik do komentarza
Udostępnij na innych stronach

Destroy:

GML
o_plecak.visible = true;

with(o_plecak) {

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if inventory[i,j] = 0 {

inventory[i,j].visible = true;

}

}

}

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if inventory[i,j] = 0 {

inventory_stack[i,j] += 1;

inventory[i,j] = id;

exit;

}

}

}

}

with(o_plecak) {

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if inventory[i,j] = 0 {

inventory[i,j].visible = false;

}

}

}

}

o_plecak.visible = false;

EDIT: Poprawiłem, ale nie testowałem.

Odnośnik do komentarza
Udostępnij na innych stronach

Wytłumacz mi jaki sens ma kod, gdzie istnieją dwa identyczne bloki "with(o_plecak)" i dwie identyczne pętle "for(...)" zagnieżdżone w tym samym bloku.

 

Z serii "wskaż 10 różnic":

GML
with(o_plecak) {

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if inventory[i,j] = 0 {

inventory[i,j].visible = true;

if inventory[i,j] = 0 {

inventory_stack[i,j] += 1;

inventory[i,j] = id;

exit;

if inventory[i,j] = 0 {

inventory[i,j].visible = false;

}

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

Sernat masz źle ponieważ jak już mówiłem exit przerywa wykonywanie dalszego kodu(pomija go)

GML
o_plecak.visible = true;

with(o_plecak) {

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if inventory[i,j] = 0 {

inventory[i,j].visible = true;

inventory_stack[i,j] += 1;

inventory[i,j] = id;

exit;

}

}

}

}

with(o_plecak) {

for(j=0;j<=7;j+=1) {

for(i=0;i<=3;i+=1) {

if inventory[i,j] = 0 {

inventory[i,j].visible = false;

}

}

}

}

o_plecak.visible = false;

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