Skocz do zawartości
Młody

Generator

Rekomendowane odpowiedzi

Kiedys robilem przyklad instance_deactivate, ktory wylacza obiekty poza viewem. Czy o takie cos ci chodzi?

Powinienem go dalej miec na upie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Chodzi o coś w stylu Minecrafta? Nie jest łatwe do implementacji, ale da się zrobić, trzeba tylko zapisać pewien zbiór reguł rządzących nad generowaniem mapy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Tak jak mówi Muuuuczek, generator musi mieć określone zasady, co może być położone obok czego, jakiej wielkości to może być maksymalnie itd. dużo nad tym roboty...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Generator w stylu minecrafta w najprostszej wersji (góry,doliny i drzewka) zajmuje kilka linijek.

 

EDIT:

Dla wyjasnienia chodzi o samą heightmape ;D

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Błagam @up oświeć mnie , bo za chiny nawet najprostszego generatora nie wymyśle !

Tak , chodzi o podobny do minecraft , jakoś nie bawi mnie rozstawianie w sandboxie podstawowych przedmiotów ;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ustaw warunkowo żeby od dużego y stawiało rzadkie klocki, później coraz częstsze następnie kamień a na końcu piasek, wystarczy zwykłe if

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

U mnie heigthmapa była w innych kolorach a funkcja okreslajaca wysokosc to:

GML
wysokosc =color_get_red(draw_getpixel(heightmap_x,heightmap_y))/255*global.map_z

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

O to chodzi , że całkowicie nie potrafię wymyślić jak to w kodzie napisać , a bez tego nie chcę zaczynać projektu :(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
O to chodzi , że całkowicie nie potrafię wymyślić jak to w kodzie napisać , a bez tego nie chcę zaczynać projektu :(

Najpierw wystartuj z silnikiem, potem sobie pykniesz ten swój generator...

Udostępnij tego posta


Odnośnik do posta
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 ?

Udostępnij tego posta


Odnośnik do posta
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

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
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;

}

}

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ponieważ funkcja exit przerywa eventa więc reszta kodu nie będzie wykonana, dla tego muszę wykonać with jeszcze raz.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Wytłumacz mi jaki sens ma kod, gdzie istnieją dwa identyczne bloki "with(o_plecak)" i dwie pętle "for(...)" zagnieżdżone w tym samym bloku.

Tru,

 

ten kod się powtarza - bezsens, musisz go zredukować troszku.

Udostępnij tego posta


Odnośnik do posta
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;

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×