Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

Dokładnie, też mi się wydaje, że nie ma automatycznych backupów w gms2 ( przynajmniej nie jest to domyślnie ustawione). Przykro mi to słyszeć Mastodont - to co Cię spotkało jest na maksa frustrujące. Mnie korzystanie z gms nauczyło jednego - backupy to konieczność, nawet nie musi być github, po prostu możesz wrzucać co jakiś czas projekt na google drive'a.

 

A  i btw. to niepolecam bawić się GMem w pracy. Człowiek cały czas się martwi, czy szef nie looknie w monitor i przez to można niestety popełnić jakiś błąd, nadpisać sobie niechcący projekt , itp itd. 

 

Ja bym próbował na twoim miejscu napisać do oficjalnego supportu, może będą w stanie Ci powiedzieć jak przywrócić do życia uszkodzony projekt.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
2 godziny temu, nowy_user napisał:

możesz wrzucać co jakiś czas projekt na google drive'a

Ale wtedy nie masz historii. Wrzucenie do gita jak robisz projekt samemu to jest dwa kliknięcia - commit wszystkiego i push. I masz do tego dostęp na całym świecie. Teraz github ma za free prywatne repozytoria.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 miesiące temu...

Witam, już raz napisałem z dosyć prostym problemem nowy post, może nie będę zakładał nowego tylko się tu podepnę tym razem.

Kompletnie nie rozumiem surface'ów wykorzystałem poradnik z neta na oświetlenie lala, wziąłem kamerę z zoomem od innego gościa no i się wszystko popsuło.

Udało mi się dzisiaj pogodzić je ze sobą no i teraz chciałem zrobić źródło światła - pochodnie - no i światło zostaje na swojej zamierzonej pozycji natomiast kiedy kamera przesuwa/oddala

się po pokoju obiekty jakby podążają do pewnego momentu za kamerą . Może ktoś mi podpowiedzieć co jest powodem ? Jeśli będzie trzeba wkleję te moje gryzmoły. 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Cześć chłopaki..Potrzebuje pomocy..Nie mogę sobie poradzić z blokiem kodu...Już tłumaczę o co chodzi..Mam trzy bloki takie same kodu w zdarzeniu step bohatera no i tak..

1 blok jest to atak bohatera który strzela podczas stania i podczas biegania..

2.blok kodu to atak bohatera który strzela podczas skoku

3 blok kodu to atak bohatera który strzela kiedy znajduje się na drabinie..

 

Chciałbym wrzucić te trzy same bloki kodu w jeden blok uwzględniając zmiany spritów i warunki,że jeśli jest na drabinie to używa tego sprita,że jeśli strzela podczas skoku to używa tego sprita..że jeśli strzela podczas stania i biegu używa tego sprita..

 

Tak wyglądają moje bloki kodu.

Proszę wybaczcie,że wkleiłem aż trzy bloki kodu

Siedzę nad tym i nie mogę to dobrze ze sobą poskładać..

Mógłbym prosić o pomoc?

 

Bardzo dziękuje z góry za każdą pomoc

 

 

//bohater strzela podczas stania i biegu

var cur = obj_kontroler_gry.current_weapon; // obiekt kontrolny ma indeks aktualnej broni, więc musimy go najpierw pobrać



if keyboard_check_pressed(vk_control) && czasAtaku <= 0 && wPowietrzu=false &&



(global.wep[cur,e_wep.ammo] > 0 || global.wep[cur,e_wep.ammo] == -1) {
czasAtaku = global.wep[cur,e_wep.firerate];

czasAtaku = _attackTime;
czasBierzacy =1;

with instance_create(x,y,attack) {

sprite_index = spr_bohater_strzela;
image_xscale = other.image_xscale;


}

    var box, ins;
    if image_xscale == -1
        box = bbox_left;
    else
        box = bbox_right;


if (global.wep[cur,e_wep.ammo] >= 1) // jeśli nie nieskończona amunicja
{
global.wep[cur,e_wep.ammo]-=1;
}



 var ins = instance_create(box+image_xscale*42, y-17,global.wep[cur,e_wep.ammo_type] );
 ins.hspeed = image_xscale * 15;
 ins.dmg = irandom_range(global.wep[cur,e_wep.dmg_min],global.wep[cur,e_wep.dmg_max]);
 ins.sprite_index = paintballs[paintball_color++]; //nowa linijka do wyboru kolorow kulki
 paintball_color &= 3;
 
   audio_play_sound(global.wep[cur,e_wep.ammo_sound],10,false)
}

  
   


//bohater strzela podczas skoku i skoku 

var cur = obj_kontroler_gry.current_weapon; // obiekt kontrolny ma indeks aktualnej broni, więc musimy go najpierw pobrać

 
if keyboard_check_pressed(vk_control) and keyboard_check(vk_space)  && czasAtaku <= 0 && 
(global.wep[cur,e_wep.ammo] > 0 || global.wep[cur,e_wep.ammo] == -1){
czasAtaku = global.wep[cur,e_wep.firerate];

czasAtaku = (_attackTime * 0.5);
czasBierzacy =1;

with instance_create(x,y,attack) {
sprite_index = spr_bohater_strzelawskoku;
image_xscale = other.image_xscale;


}

    var box, ins;
    if image_xscale == -1
        box = bbox_left;
    else
        box = bbox_right;
    
        
        

if (global.wep[cur,e_wep.ammo] >= 1) // jeśli nie nieskończona amunicja
{
global.wep[cur,e_wep.ammo]-=1;
}


  var ins = instance_create(box+image_xscale*50, y-25,global.wep[cur,e_wep.ammo_type] );
  ins.hspeed = image_xscale * 15;
  ins.dmg = irandom_range(global.wep[cur,e_wep.dmg_min],global.wep[cur,e_wep.dmg_max]);
  ins.sprite_index = paintballs[paintball_color++]; //nowa linijka do wyboru kolorow kulki
  paintball_color &= 3;
  
    audio_play_sound(global.wep[cur,e_wep.ammo_sound],10,false)

}

  
//bohater strzela kiedy znajduje się na drabinie
  
  
  var cur = obj_kontroler_gry.current_weapon; // obiekt kontrolny ma indeks aktualnej broni, więc musimy go najpierw pobrać

 
if keyboard_check_pressed(vk_control) and keyboard_check(vk_space)  && czasAtaku <= 0 && drabina==true && place_meeting(x,y,obj_drabina) &&
(global.wep[cur,e_wep.ammo] > 0 || global.wep[cur,e_wep.ammo] == -1){
czasAtaku = global.wep[cur,e_wep.firerate];

czasAtaku = (_attackTime * 0.5);
czasBierzacy =1;

with instance_create(x,y,attack) {
sprite_index = spr_bohater_strzelanadrabinie;
image_xscale = other.image_xscale;


}

    var box, ins;
    if image_xscale == -1
        box = bbox_left;
    else
        box = bbox_right;
    
        
        

if (global.wep[cur,e_wep.ammo] >= 1) // jeśli nie nieskończona amunicja
{
global.wep[cur,e_wep.ammo]-=1;
}


  var ins = instance_create(box+image_xscale*50, y-25,global.wep[cur,e_wep.ammo_type] );
  ins.hspeed = image_xscale * 15;
  ins.dmg = irandom_range(global.wep[cur,e_wep.dmg_min],global.wep[cur,e_wep.dmg_max]);
  ins.sprite_index = paintballs[paintball_color++]; //nowa linijka do wyboru kolorow kulki
  paintball_color &= 3;
  
    audio_play_sound(global.wep[cur,e_wep.ammo_sound],10,false)

}

 

Odnośnik do komentarza
Udostępnij na innych stronach

Witam,
Natknąłem się na taki błąd i nie mam pojęcia czego on wynika. Ktoś ma jakiś pomysł? 

Create:

for(var i=0; i < 64; i++) //64 - tyle jest promieni
{
	grid[i] = -1;	//ray type
	grid[i][i] = -1; //ray length
}

Draw:

for(var i=0; i < 64; i++) //64 - tyle jest promieni
{
	draw_text(400, 5 + (i*10), grid[5]);
}

wynik:
image.png.f1c85e1cefb6e8a7d76614522b38eff2.png

 

[0,0,0,0,0,-1] <-- zależnie co wpiszę w index tablicy, tyle jest zer
np.
grid[3] = [0,0,0,-1]
grid[6] = [0,0,0,0,0,0,-1]

jak wpiszę grid[ i ][ i ] to jest ok. ale przy jednym grid[ i ] to już nie :/ 

Przy zmianie zmiennej grid, jest to samo. Uruchomienie ponownie kompa, to samo. 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ja nie bardzo rozumiem co tu się dzieje, ale:

 

jeśli napiszesz grid[0][0] = 1, to tak samo jakby napisać grid[0] = [1];
jeśli dodasz grid[0][1] = 2, to mamy grid[0] = [1, 2];

 

Mam wrażenie, że kasujesz sobie tablicę 2D.

Odnośnik do komentarza
Udostępnij na innych stronach

Generalnie sam już nie pamiętam co miałem wczoraj na myśli. Coś kojarzę, że w gm teraz nie ma tablic dwuwymiarowych tylko są zagnieżdżenia, a nie miałem z tym nigdy styczności. Dlatego chciałem zrobić tak jakby tablice jedno i dwuwymiarową pod jedną zmienną. Czyli jakbym chciał się odwołać do pierwszej tablicy to wpisywałbym grid[ i ], a jak do zagnieżdżonej drugiej tablicy (coś na styl dwuwymiarowej) to grid[ i ][ i ].

Generalnie błąd rozwiązałem tym, że mam
grid[ 0 ] [ i ] - jakby do 1D
grid[ i ] [ i ]  - jakby do 2D 

... właśnie pisząc to zauważyłem, że mogę zrobić
grid[ 0 ][ i ]
grid[ 1 ][ i ]

i traktować to jak dawne tablice dwuwymiarowe 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Dokładnie tak. A przed chwilą próbowałeś pod jedną wartością mieć dwie zmienne - i liczbę i tablicę jednocześnie. Tablica w tablicy to generalnie stara tablica 2D, jedyna różnica teraz, to że za każdym razem możesz mieć inną ilość elementów jeśli chcesz, ale jak się pilnujesz, to używasz je tak samo (i nawet zapis grid[1, 2] powinien działać).

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

Przed wprowadzeniem funkcji (wcześniej skrypty), można było fajnie napisać "state machine" przy pomocy enum, które podpowiada po kropce. Teraz enum ciągle wyrzuca błąd "enum assignment must be an integer constant". Ma ktoś na to fajną radę? 

Próbowałem już coś takiego:

enum pistolstate 
{
	ready = scrPistolReady, //Już nie działa
	ready = scrPistolReady.id, // nie działa, pomimo, że zwraca 10007
	ready = real(scrPistolReady), // nie działa
	ready = real(scrPistolReady.id), // nie działa
	ready = int64(scrPistolReady.id), // nie działa
	ready = method_get_index(scrPistolReady), //zwraca undefinied
	
	fire = 1,
	reload = 2
}


Jedyne rozwiązanie jakie udało mi się do tej pory zrobić, to takie, ale na dłuższą metę, przy kilku obiektach, jest to męczące ._.

//dla latwiejszego zmieniania state (podpowiadanie zmiennych)
enum herostate
{
	idle = 0,
	walk = 1
}

//nowa wersja gma zmusza do tłumaczenia...
set[herostate.idle] = scrHero_idle;
set[herostate.walk] = scrHero_walk;


//ustaw state
state = set[herostate.idle];

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

A czemu nie

enum herostate
{
	idle,
	walk
}

set = [scrHero_idle, scrHero_walk];

Wtedy 0,1,...,n samo zostanie ustawione kolejno ?

 

Btw. w 2.3 skrypty nie są po kolei z drzewkiem i reszta zasobów też nie.

Odnośnik do komentarza
Udostępnij na innych stronach

no można by ale generalnie chodziło mi o to, żeby przypisać od razu do enum, tak jak to było przed funkcjami. Przeczytałem dzisiaj całą definicję enum z wersji 2.3 dla gm:s2 i wychodzi na to, że nie można już przypisywać zmiennej ani funkcji, nawet jeśli byłyby to liczby. Dlatego też funkcja.id nie działa, pomimo, że zwraca integer :/ 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 miesiące temu...
  • 2 miesiące temu...

Zrobiłem dzisiaj swój pierwszy system cząsteczek (tak wiem, tyle lat w gm'ie a ja dopiero cząsteczki tknąłem :P).
Mam pytanie. Przy pewnej zmiennej cząsteczki mają zmienić swój kierunek lotu. Czy można już istniejącym cząsteczkom cokolwiek modyfikować? Z tego co czytałem, to nie.
Na razie pasuje mi rozwiązanie typu part_particles_clear(pSystem) i zastąpienie ich nowymi ale cząsteczki znikają momentalnie, a chciałbym, żeby alpha najpierw zleciała do zera, coś jakby funkcja miała nazywać się part_particles_clear_with_alpha(pSystem)

Ktoś ma na to radę? 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Oczywiście, że można, tak samo jak wtedy, gdy tworzysz system, identycznymi funkcjami można modyfikować na bieżąco kierunek, kształty itd. Wiele osób tego nie wie, a właśnie tak można stworzyć fajniejsze dynamiczniejsze particle (np. coś na wzór tornada - przesuwasz punkt startowy clipart po kole i zmieniasz ich kierunek, żeby leciały w dobrą stronę).

 

Particle można też "pauzować" wyłączając automatyczną ich aktualizację, czy rysować ręcznie.

 

Postaram się napisać na ten temat niedługo artykuł, właśnie podsunąłeś mi temat :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 5 miesięcy temu...

Pytanko co do surface... Mam Sprite 500x500 okrągłego gardientu na światełko, ale rysowanie surface nachodzi na siebie i nie wygląda to zbyt ładnie, co mogę z tym zrobić? 

 

var VW = camera_get_view_width(view_camera[0]),
VH = camera_get_view_height(view_camera[0]),
VX = camera_get_view_x(view_camera[0]),
VY = camera_get_view_y(view_camera[0]);

if(surface_exists(global.Light_Surf)){
surface_set_target(global.Light_Surf);
//BlackAlpha
draw_clear_alpha(c_black,0.8);

			with(o_Light){
				
				gpu_set_blendmode(bm_subtract);
				draw_sprite_ext(s_Light,0,x-VX,y-VY,0.5,0.5,0,c_white,1); // 
				gpu_set_blendmode(bm_normal);
				
				gpu_set_blendmode(bm_add);
				draw_sprite_ext(s_Light,0,x-VX,y-VY,0.5,0.5,0,c_yellow,0.15);
				gpu_set_blendmode(bm_normal);
				
				draw_sprite_ext(s_RoadLight,0,x-VX,y-VY,1,1,image_angle,c_white,1);
				
				
				}
				
				with(o_PawnShp){
				
				gpu_set_blendmode(bm_subtract);
				draw_sprite_ext(s_Light,0,x-VX,y-VY,0.3,0.3,0,c_white,1);
				gpu_set_blendmode(bm_normal);
				
				gpu_set_blendmode(bm_add);
				draw_sprite_ext(s_Light,0,x-VX,y-VY,0.3,0.3,0,LightColor,0.15);
				gpu_set_blendmode(bm_normal);
				
				draw_sprite_ext(s_PawnShop,image_index,x-VX,y-VY-8,1,1,180,c_white,1);
				draw_sprite_ext(s_PawnShop,image_index,x-VX,y-VY+8,1,1,0,c_white,1);

				}
surface_reset_target();

draw_surface(global.Light_Surf,VX,VY);

} else { 	
	global.Light_Surf = surface_create(VW,VH);
}

 

Surf.png

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ne bardzo rozumiem problem - moim zdaniem wygląda ok. Jeśli jednak jest jakiś problem, no to musisz poprawić ten gradient, tak, żeby tam gdzie się zdaje, że on się kończy, faktycznie się kończył, a nie miał jeszcze z 30-40 pikseli.

Z matematycznego punktu widzenia zdaje się, że wyświetla się ok.

Odnośnik do komentarza
Udostępnij na innych stronach

35 minut temu, gnysek napisał:

Ne bardzo rozumiem problem - moim zdaniem wygląda ok. Jeśli jednak jest jakiś problem, no to musisz poprawić ten gradient, tak, żeby tam gdzie się zdaje, że on się kończy, faktycznie się kończył, a nie miał jeszcze z 30-40 pikseli.

Z matematycznego punktu widzenia zdaje się, że wyświetla się ok.

Już zmniejszyłem, popatrz jak gradient na siebie nachodzi, jeśli chodzi o latarnie, widać zaokrąglenia, bawiłem się bmami ale efekty słabe, wygląda jak by rysowały się wszystkie na raz, bo światełko od pawnshopu ładnie nachodzi bo jest rysowane następne w kolejności, jeszcze jutro nadam im jakiś nr i spróbuję for narysować je po kolei, może coś to da, bo wygląda fajnie ale jednak te zaokrąglenia jakoś mnie w oczy bolą ?

Odnośnik do komentarza
Udostępnij na innych stronach

EDIT: Problem występuje przy blend mode bm_add... jak jest sam biały bm_substract, to nie ma tego problemu. Więc chyba po prostu wywalę tę linijkę i zamiast, żółtego światła będzie białe i tyle :P

 

 

Właśnie próbowałem na różne sposoby, efekt byle jaki, i człowiek już nie wie jak to przykombinować, nawet uciąłem trochę gardient ale dalej widać linię, rysowanie w pętli for też daje ten sam efekt ?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

To jest jakiś problem z kanałami alpha w takim razie. Spróbuj albo zaznaczyć opcję "premultiply alpha" lub "edge filtering". Ja np. mam problem z obrazkami robionymi w Affinity Designer, bo jak je skalujesz (bez względu na tryby), to dostają czarnej obwódki i "edge filtering" je naprawia.

 

obraz.png

Odnośnik do komentarza
Udostępnij na innych stronach

W dniu 25.01.2022 o 09:51, gnysek napisał:

To jest jakiś problem z kanałami alpha w takim razie. Spróbuj albo zaznaczyć opcję "premultiply alpha" lub "edge filtering". Ja np. mam problem z obrazkami robionymi w Affinity Designer, bo jak je skalujesz (bez względu na tryby), to dostają czarnej obwódki i "edge filtering" je naprawia.

 

obraz.png

Paaanie luksus teraz :D światła które na siebie nachodzą ładnie się zlewają :) Dzięki Gnysek! :D Zdrówka :P

 

 

light2.png

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