Skocz do zawartości

Xyridon

Użytkownicy
  • Postów

    5
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Xyridon

  1. Ehh Panowie no to nie wiem. Teraz mam takie coś i to w dalszym ciągu po kolizji pocisku z cegłami usuwa wszystkie z mapy if(HIT) { sprite_delete(sprite) sprite = sprite_create_from_surface(sprite, 0, 0, room_width, room_height, false, true, 0, 0) sprite_collision_mask(sprite, 1, 0, 0, 0, 0, 0, bboxkind_precise, 0) //tworzę do niego maskę sprite_index = sprite; HIT = false; } draw_sprite(sprite_index, 0, 0, 0); Chciałbym, żeby po uderzeniu pocisku w cegły, te nie znikały. No i okej, po tej zmianie: if(HIT) {//make a new sprite code sprite_delete(sprite) sprite = sprite_create_from_surface(sprite, 0, 0, room_width, room_height, false, true, 0, 0) sprite_collision_mask(sprite, 1, 0, 0, 0, 0, 0, bboxkind_precise, 0) HIT = false; } draw_sprite(sprite, 0, 0, 0); Faktycznie teren pozostaje nietknięty po uderzeniu pocisku. Dobra. Teraz muszę tylko ponownie zaaplikować robienie dziur EDIT: Teraz robienie dziur mi nie działa if(HIT) { sprite_delete(sprite) sprite = sprite_create_from_surface(sprite, 0, 0, room_width, room_height, false, true, 0, 0) gpu_set_blendmode(bm_subtract); draw_set_color(c_black); draw_rectangle(damage_x -8, damage_y -8, damage_x +7, damage_y +7, false); gpu_set_blendmode(bm_normal); sprite_collision_mask(sprite, 1, 0, 0, 0, 0, 0, bboxkind_precise, 0) HIT = false; } draw_sprite(sprite, 0, 0, 0);
  2. W moim przypadku to nie pociski, bo wszędzie dookoła tych czołgów są niezniszczalne szare ściany, przez które nic się nie przedostaje co oznacza, że pociski są przy takiej kolizji usuwane, żeby nie leciały w nieskończoność. Wrzuciłem Twój kod i przy uderzeniu w cegły, znikają wszystkie, a nie tylko fragment po uderzeniu/wybuchu. Jeszcze to próbuję ogarnąć, może jakoś to naprawię, bo serio głupi jestem ehh
  3. Siema, pomoże mi ktoś z tym problemem? Bo nie jestem zbyt doświadczony, a bardzo mi na tym zależy [TUTAJ] Ewentualnie jakby ktoś był w stanie naprawić ten problem odpłatnie... bo nie potrafię tego zrozumieć a chciałbym mieć że tak powiem gotowca, który by nie generował tego problemu i mógłbym ruszyć dalej z rozwojem gry. Nie ukrywam, że nie cierpię surface'ów, ale potrzebuję ich w projekcie... no koledzyyy, znajdzie się chętny pro coder? Piszcie PW. Ja wiem, że już sam GMS jest sporym ułatwieniem w programowaniu, a to brzmi, jakbym był upośledzony prosząc o ułatwienie w ułatwieniu...ale nie umiem tego zrozumieć za cholerę i trochę mi na czasie zależy, żeby takiego małego projektu nie robić zbyt długo, tylko naprawić rozwinąć i projekt zamknąć. A podejrzewam, że dla zaawansowanych GMS'owców, to bułka z masłem i maks pół godziny rozkminy i pisania
  4. No tak. Nie, maska kolizji jest obliczana precyzyjnie i na nowo po każdym uszkodzeniu terenu. A "blokowość", czy inaczej wyrównanie do siatki jest zastosowane po stworzeniu wystrzelonego pocisku jak i po uderzeniu w teren. Czyli jeśli pocisk zostanie wystrzelony z pozycji x2 i y5, to ja to dopasowuję do siatki 4x4 piksele, czyli x0 i y4 i z tych nowych koordynatów dopiero leci pocisk. A do tego, jeśli miejscem jego kolizji z mapą/cegłami jest na przykład x42 i y85 to zmienia miejsce wybuchu, który uszkadza teren na x40 i y84. Mam nadzieję, że rozumiesz. Chociaż nie o tym chciałem rozmawiać, bo nie wiem, jak usunąć z pamięci poprzedni sprite mapy sprzed jej kolejnego uszkodzenia. A tak, jak pisałem, jeśli użyję ma przykład obiektów cegieł, to jeśli mapa będzie wypełniona cegłami na full, to gra będzie lagowała i to ostro nawet, jeśli cegły nie będą miały żadnych skryptów. A z moich obliczeń wyszło, że potrzebowałbym ponad 10.000 obiektów o ile nie więcej, bo już nie pamiętam. A jak niszczysz blok 16x16 pikseli, to powinien się podzielić na 4 bloki 8x8, a te z kolei na 16 bloczków 4x4, więc sam widzisz, jak liczba obiektów może się mnożyć podczas grania Nie wiem, czy mogę, ale wrzucam filmik jak to wygląda za każdym razem [FILMIK]
  5. Witam. Pracuję nad klonem BattleCity, do stworzenia cegieł zamiast pojedynczych obiektów użyłem sprite_create_from_surface, żeby gra nie lagowała przez tysiące obiektów. Wszystko spoko do momentu, kiedy zauważyłem, że po kilku minutach gra wykorzystuje już 3.7Gb i wtedy następuje crash. Zauważyłem też, że każda modyfikacja mapy (czyli zrobienie w niej dziury pociskiem gracza czy bota) dodaje kilka mega do wykorzystywanej pamięci. Według mnie wygląda to tak, jakby mapa przy każdym trafieniu w nią aktualizowaą się o nową dziurę, a stary sprite tej mapy jest zamieniany na nowy z dziurą, jednak gdzieś w pamięci pozostają poprzednie wersje tego sprite'a. Jak usunąć te zalegające wersje mapy? Mam nadzieję, że mówię dość jasno. Oto mój kod z Draw Event: if(HIT) {//make a new sprite code var _temp_surf = surface_create(sprite_width, sprite_height); surface_set_target(_temp_surf); draw_sprite(sprite_index, 0, 0, 0); gpu_set_blendmode(bm_subtract); draw_set_color(c_black); draw_rectangle(damage_x -8, damage_y -8, damage_x +7, damage_y +7, false); gpu_set_blendmode(bm_normal); sprite_index = sprite_create_from_surface(_temp_surf, 0, 0, sprite_width, sprite_height, false, false, 0, 0); <--- kiedy pamięć podręczna osiągnie 3.7Gb gra crashuje i pokazuje, że tu jest błąd sprite_collision_mask(sprite_index, false, 0, 0, 0, 0, 0, 0, 0); surface_reset_target(); surface_free(_temp_surf); HIT = false; } Nie jestem zaawansowanym programistą, więc jeśli mógłby mnie pokierować zaawansowany programista GMS'a, jak to zrobić, to byłbym niezmiernie wdzięczny, bo od lat o tym projekcie myślę, a totalnie nie orientuję się w surface'ach. Chciałbym też uniknąć zapisywania czegokolwiek w plikach, żeby zachować prostotę kodu do dalszego szlifowania
×
×
  • Dodaj nową pozycję...