Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   27 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
  • 0
Chell

Temat zbiorczy na drobnostki

Pytanie

Chell    26

masz pytanie, które nie zasługuje na własny temat i chcesz je zadać w shoutboxie? nie rób tego! tam utonie! spytaj tutaj. :-)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

765 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Jak dołączyć float do int? Zmienić int w float, ale tak, żeby ten int było po przecinku. Coś takiego:
 

zmienna = 0.hspeed
zmienna = 0. && hspeed
zmienna = 0. and hspeed
zmienna = 0.+hspeed (tak wiem, to jest bez sensu, bo to zwykłe dodawanie dwóch liczb)

Chodzi mi o to, żeby liczba przed przecinkiem zawsze wynosiła 0

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Threef    17

Jednym z pewnych rozwiązań jest zabawa stringami. Nie mam siły teraz myśleć więc czekam aż ktoś zaproponuje optymalniejsze rozwiązanie.

zmienna = real("0."+string(zmienna2))

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
strzelec    0

Trochę innym rozwiązaniem (dłuższym) jest podzielenie zmiennej przez wielokrotność 10:

zmienna = 4467;
zmienna2 = string(zmienna); // zmiana liczby na string
zmienna3 = string_length(zmienna2); //policzenie z ilu cyfr składa sie string zmienna
zmienna4 = zmienna / power(10, zmienna3); // podzielenie zmiennej przez dzisiątkę do potęgi zmienna3

zmienna5 = string_format(zmienna4, 1, zmienna3); // wypisuje zmienną po z odpowiednią ilością miejsc po przecinku

Zmienna5 jest po to. bo GM zaokrąglał wynik do 2 miejsc po przecinku.

A tu wklejając wszystko do przykładu Threefa :)

zmienna2 = string_format(real("0."+string(zmienna)), 1, string_length(string(zmienna)));

 

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Threef    17

To mam już lepsze:

liczba = 31352
wynik = liczba
while(wynik>1) {
	wynik/=10
}

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
I am vader    25

W tym momencie czy nie wydajniej juz zostac przy "0."+string(zmienna)?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Ignatus    13

Mam do narysowania setki drzew.Tzn dokładnie każde drzewo w top-down jest "fake 3d" rysuje się kilka razy  w zależności od pozycji gracza-wygląda to spoko ale x100 to zaczyna zamulać.Teraz pytanie jak to najskutczniej zoptymalizować?

 

Próbowałem w draw drzew:

if (distance_to_object(obj_Player<900)){
   // Draw } 

- nic to nie dało

 

albo

if (rectangle_in_rectangle(bbox_left, bbox_top, bbox_right, bbox_bottom, bview_xview[0], view_yview[0], view_xview[0] + view_wview[0], view_yview[0] + view_hview[0])) { // Do something }

Trochę lepiej ale niewiele i do tego drzewa pojawiają sie na skraju view co jest widoczne

 

Jakieś pomysły?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Threef    17

@Ignatus Drugie rozwiązanie, ale musisz uwzględnić rozmiar drzew. Niestety ale prawdopodobnie rysujesz tego za dużo. 

Poza tym nie rób if(rectangle_in_rectangle()){draw_sprite()}

Rób w step: if(point_in_rectangle()) {visible =true} else {visible=false}

W ten sposób całkiem wyłączasz event draw. To o wiele bardziej przyśpiesza bo dany obiekt wcale nie wykonuje eventu draw. Sprawdzenie punktu też jest szybsze niż prostokąta. Dobież tylko marginesy w rozmiarach sprite.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Ignatus    13

Jakoś nie potrafię tego skutecznie ogarnąć, zapewne dlatego że view obraca się razem z graczem i zawsze jakiś fragment widoku jest w innej pozycji niż zakładałem -a drzewa pojawiają sie i znikają z kosmosu..

 

 

Stąd kolejne pytanie jak zrobić pole większe od view np o połowę?

 

jak testowo zrobię draw_rectangle(view_xview[0], view_yview[0], view_xview[0] + view_wview[0], view_yview[0] + view_hview[0],0) to widzę wyraźnie że jest mnóstwo miejsca poza obrazem zaznaczonym-jak zaznaczyć pole większe o połowę od aktualnego view?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Threef    17

Jeżeli dobrze przyjrzysz się temu jak się obraca kamera to zauważysz ze lewy górny punkt zostaje w miejscu ale pozostałe rogi się obracają dookoła punktu w lewym górnym rogu. Jeżeli obrócisz kamerę o 90 stopni to zamienią się osie. W górę będziesz mieć x a w prawo y. Wtedy szerokość ekranu która wynosiła np 1280 jest w przeciwną stronę. To co jest najbezpieczniej robić to w twoim wypadku operować na promieniu względem środka ekranu.

var r = max(view_wview[0],view_hview[0])+margines
var px = view_xview[0]+view_wview[0]/2
var py = view_yview[0]+view_hview[0]/2

with (drzewo) {
	if(point_distance(x,y,px,py)>r) {
		visible=false
	} else {
		visible=true
	}
}

 

 

Edit:

A nie, bo właśnie w tym chyba problem. Musiałbyś wymnażać to przez sin i -cos z view_angle[0] żeby dawało ci dobrą pozycję środka kamery... Chyba.

Nie jestem już w stanie odpowiedzieć. Z dużo wypiłem. :|

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Ignatus    13

Działa idealnie.Wstawiłem z 200 drzew i zerowa ścina.Teraz pytanie- czy lepiej zrobić te var r,px,py w każdym obiekcie drzewo, zrobić to tylko np w obj control czy walnąć z tego global? Co najlepsze dla optymalizacji (teraz mam w obj_tree_parent i dziala dobrze ale może da się lepiej;p?)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Threef    17

W teorii teraz jedynie wyłączasz rysowanie. Dzięki temu kolizje dalej zachodzą poza ekranem, więc unikniesz dzięki temu sytuacji że np jakiś NPC utknie w drzewie gdy zbliżysz się.

Ale jeżeli nie potrzebujesz sprawdzać kolizji to możesz równie dobrze dezaktywować obiekty. Jeżeli dezaktywujesz to lepiej wrzucić ten kod do drzew. Ale jeżeli nie to ja bym zrobił jeden obiekt który zarządzałby tym rysowaniem. Może to też robić gracz.

 

No i 200 drzew to... ok. Ja przy tej technice w GM miałem 200000 obiektów w 30FPS na Pentium 4

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Ignatus    13

Zaimportowałem do projektu grupę skryptów z innego projektu.W tamtym projekcie wszystko śmiga ok- tutaj natomiast

 

Reading project file....Error : script missing "scripts\animated_tile_add.gml"
Error : script missing "scripts\animated_tile_cleanup.gml"
Error : script missing "scripts\animated_tile_disable_all.gml"
Error : script missing "scripts\animated_tile_enable_all.gml"
Error : script missing "scripts\animated_tile_get_animation_speed.gml"
Error : script missing "scripts\animated_tile_get_background.gml"
Error : script missing "scripts\animated_tile_get_current_background.gml"
Error : script missing "scripts\animated_tile_get_current_frame.gml"
Error : script missing "scripts\animated_tile_get_frame_count.gml"
Error : script missing "scripts\animated_tile_get_next_frame.gml"
Error : script missing "scripts\animated_tile_init.gml"
Error : script missing "scripts\animated_tile_is_playing.gml"
Error : script missing "scripts\animated_tile_update.gml"

Projekt w ogóle się nie kompiluje bo wyskakuje  od razu okienko z takimi błędami.

Odpowiedź wydaje się oczywista- błąd w końcu oznacza że nie istnieją takie skrypty- problem polega na tym że jak najbardziej istnieją i to o dokładnie takich nazwach.

O co tu chodzi?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Threef    17

Nie działa dodawanie kilku skryptów na raz. Musisz robić to pojedynczo. Usuń wszystkie które stwarzają błędy i dodaj je ręcznie

  • Super (+1) 1
  • Lubię (+1) 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Threef    17

Tak to jest bug.  Wcześniej można było tak importować. Teraz po prostu dodaje się wpis do *.project.gmx ale nie kopiują się pliki.

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

×