Skocz do zawartości

gnysek

Administratorzy
  • Postów

    9 823
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    143

Treść opublikowana przez gnysek

  1. Jak obiekt jest deaktywowany, to go w ogóle nie ma - nie wiesz ile jest takich obiektów, nie sprawdzisz, czy istnieją.
  2. Pytanie, gdzie ten kod wstawiłeś i co masz w draw... bo jedno od drugiego jest zależne, to nie jest tak, ze kod w jednym miejscu sprawia, że ten w innym nie działa @up ' i " to jest to samo w GML, to nie PHP gdzie w " się doszukuje wyrażeń
  3. Rodzic. Trochę jak grupowanie - znaczy się masz obiekty: objTata objSyn objCorka i w dwóch ostatnich jako Parent ustawisz objTata, no to jak napiszesz instance_count(objTata) - zwróci Ci 3 - bo objSyn i objCorka dziedziczą po tacie (więc mozna się do nich dostać po jego nazwie). Dziedziczą też kod w eventach, jeśli w obiekcie - dziecku, ten kod nie zostanie niczym nadpisany (obojętnym klockiem) - aczkolwiek event_inherited() wywołuje zdarzenia z ojca w takim przypadku. Dzieci są więc jakby kilkoma obiektami na raz.
  4. Nie. Dezaktywujesz wszystkie obiekty danego typu (wystarczy dać wspólnego rodzica), a aktywujesz tylko obszar. Działa całkiem znośnie.
  5. Można wykonywać kod tylko w tym roomie w którym się jest. Ale... możesz ustawić sobie jakaś zmienną globalną i jak przechodzisz do tego roomu, to jeśli ona ma wartosć taką a taką, to wykonywany jest kod.
  6. Nie, raczej chodzi o to, żeby dezaktywować instancje, zeby gra nie przycinała jak jest na ekranie 10 obiektów, a w roomie 10000. Takie coś mam w Almorze gdzie room ma 60000px szerokości.
  7. Tilesety do tego nie służą. Tilesety są do tego, żeby układać niektóre grafiki tła które nie muszą być obiektami w celu pominięcia sprawdzania dla nich eventów (step, kolizja, alarmy, draw).
  8. Na vertexach to by to w GM w sumie zrobił ;)
  9. Może być. Ale, mi się niektóre gry GMowe tną na 1GB Radeonie 5650... na którym np. Wiedźmin 2 leci w pełnym HD.
  10. Uczą na matematyce od podstawianiu liczb za zmienną?
  11. Ale jak najbardziej istnieje. Przykładowe gry: http://yoyogames.com/game_showcases W domowych warunkach opcja ta będzie dostępna na wiosnę.
  12. Crysis jest napisany w ASM/C++, GameMaker nie. GML jest tylko interpretowanym językiem odpalającym funkcje DirectDraw3D (i nie korzysta z wielu funkcjonalnosci dzisiejszych kart graficznych) - działa to trochę jak JavaScript w starszych przeglądarkach - do tego stopnia, że gry w GameMakerze HTML5 pod google chrome w niektórych przypadkach są szybsze, niż wersje windowsowe. Tak to wygląda, że gra GMowa ma wymagania z 10x większe niż ta sama gra w czystym C++
  13. W takim razie musisz mieć gdzieś drugi raz tworzenie obiektów :) Sprawdź dokładnie (w GM8.1 jest opcja przeszukiwania kodu również w obiektach - Ctrl+Alt+F bodaj).
  14. od środka grafiki do lufy. środka okręgu inaczej.
  15. Znajdź środek sprite'a, policz ile jest pikseli w prawo, ile w górę do lufy, i otrzymasz promień oraz kąt (dla x i y powinny być takie same, inaczej nabój będzie zależnie od obrotu dalej lub bliżej się tworzył)
  16. Proszę, teraz działa z tablicami, ds_list i ds_map :) https://gmclan.org/up23_3_foreach.html Zaznaczam jednak, że to wciąż bardziej ciekawostka bo te same zadania tradycyjną metodą są dużo szybsze.
  17. switch(hotbar.idObj[ argument0 ]) a potem: draw_sprite ( spr_sprite(i), ...
  18. Nigdzie nie napisałem, że dla tablic jest to szybsze. variable_local_array_get zjada większość tego czasu :) W przypadku stuktur danych (ds_) będzie to już praktycznie żadna różnica, ale za to jaka wygoda :) Będę miał dostęp do pełnego GM, dopiszę brakującą resztę i pogadamy :)
  19. Nie, to raczej doświadczenie. Zaskoczenie przeciwnika to najlepszy element obrony :) Mam kilku nauczycieli którzy mnie przepraszali po latach za swoje zachowanie :P
  20. Z racji, że w GM nie ma tablic asocjacyjnych, to na normalnych tablicach tylko nieznacznie skraca zapis, ale w przypadku ds_list i ds_map - zaoszczędza sporo kodu - ofc tą funkcjonalność trzeba sobie dopisać, ale to zrobię dziś w domu i wrzucę na stronę jako przykład :) http://4programmers.net/C_sharp/Foreach http://php.net/manual/en/control-structures.foreach.php
  21. Dzisiaj na http://www.gmlscripts.com/forums/viewtopic.php?id=1911 natknąłem się na przykład pętli foreach dla GM oraz ds_list. Zaciekawiło mnie na czym polega myk i okazało się, że jest to bardzo prosta sprawa - GM działa także gdy pomijamy średniki, wiec można ten fakt wykorzystać. Zgodnie z dokumentacją Game Makera: for (<wyrazenie1>; <warunek>; <wyrazenie2>) <wyrazenie3> Jak widzicie, nigdzie nie jest napisane, że wyrazenie1 musi ustawiać jakąś zmienną, a wyrazenie2 zwiększać/zmniejszać jej wartość. Co więcej - warunek nie musi być znakiem mniejszości czy większości. Napisane jest tylko, że wykonywanie trwa tak długo, jak warunek jest prawdziwy. W takim razie, wystarczy tu wstawić coś, co będzie nam zwracać prawdę lub fałsz - zmienną, lub funkcję. W ten oto sposób powstała pętla foreach. Pomysł jak już wspomniałem nie jest mój, natomiast wersja do obsługi tablic zamiast list jest już jak najbardziej moja (ponieważ w pracy nie mam pełnej wersji Game Makera, nie miałem dostepu do ds_list). SKRYPTY Pierwszy skrypt ustawia tablicę o rozmiarze 10, a potem w pętli foreach wyświetla jej elementy. GML (test) for (i=0; i<10; i+=1) { tablica = i+1; } for( each('tablica',10) as key_value()) { show_message(string(key) + '[' + string(value) +']'); } GML (each) if !variable_global_exists('as') { globalvar as,eachVar,eachSize,key,value; //globalne as = true; } eachVar = argument0; // referencja na tablice eachSize = argument1; key = -1; key_value(); GML (keyvalue) if key < eachSize - 1 { key += 1; value = variable_local_array_get(eachVar, key); } else { as = false; key = -1; value = -1; eachVar = -1; eachSize = -1; } Ha! Jak to działa? jak widzicie, mamy pętlę: for( each('tablica',10) as key_value()) { show_message(string(key) + '[' + string(value) +']'); } Tak naprawdę jest to normalna pętla for, tylko brakuje średników (bo GM ich nie wymaga). GML for( each('tablica',10); as; key_value()) funkcja each definiuje (jeśli nie istnieje) globalną zmienną "as" (jako globalvar, dlatego nie trzeba pisać global. z przodu), oraz kilka innych globalnych zmiennych które są nam tu potrzebne - key i value będą miały aktualny klucz i wartość tablicy. Zgodnie z dokumentacją, pierwsze wyrażenie jest przetwarzane raz. Wyrażenie drugie jest sprawdzane. Nasza globalna as ma wartość true, zatem wyrażenie jest prawdziwe i wykonywane jest wyrazenie3 - czyli ciało pętli. Potem wracamy do wyrazenia2 - które zwiększa nam iterację, a przy okazji sprawdza, czy dochodzimy do konca tablicy - jeśli tak, to ustawi nam as na false. Następnie znów sprawdzany jest warunek - jeśli as == false, no to pętla przestaje działać. Takie proste, a dopiero teraz to odkryłem!
  22. break nie jest potrzebny po return.
  23. Ciężko stwierdzić, czy nie masz gdzieś w kodzie innego błędu, skoro nie mamy gry. Sprawdź czy left pressed ze zwykłym left nie pomyliłes.
×
×
  • Dodaj nową pozycję...