-
Postów
330 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Odpowiedzi opublikowane przez Cygnus
-
-
Skomplikowana rzecz,też się z pochodnią borykam tak jak ty:/
-
Oczywiście te wartości dla liczników powinieneś sobie samemu wybrać.
Thref właśnie testuje na swoich wartościach..Dziękuje;)
-
Stwórz 2 stany i odliczaj licznikiem.
GMLif(strzelam == true)
{
//kod strzelania
licznik_czasu--
if(licznik_czasu<=0)
{
strzelam=false
licznik_czasu=200
}
} else {
//Nie strzelam
licznik_czasu--
if(licznik_czasu<=0)
{
strzelam=true
licznik_czasu=400
}
}
Dziękuje Threef wszystko działa jak należy;]
zrobiłem tak:
w create obj rura dałem
GMLdirection=180 //nadaje lewy kierunek ognialicznik_czasu=0
a w stepie tak jak mi podałeś czyli
GMLif(strzelam == true){
scr_Fire(x,y,(direction-5)+random(10),2)
licznik_czasu--
if(licznik_czasu<=0)
{
strzelam=false
licznik_czasu=200
}
} else {
//Nie strzelam
licznik_czasu--
if(licznik_czasu<=0)
{
strzelam=true
licznik_czasu=400
}
}
to samo zrobiłem w drugim stanie super działa..jeszcze raz dziękuje.
-
To daj chociaż sprite, żebym mógł odtworzyć problem :)
Gnysku inaczej...poradziłem sobie z miotaczem..ale zmieniłem całkowicie kod ognia i kod rury,mam tylko jeden problem,a mianowicie taki,że chce zrobić przerwe np 2 sekundową,bo teraz non stop obiekt pali się ładnym miotaczem ognia..
a,wiec tak stworzyłem skrypt
a w nim:
GMLrepeat (1+floor(random(argument3))){fire1=instance_create(argument0,argument1,obj_ogien1)
fire1.direction=argument2
fire2=instance_create(argument0,argument1,obj_ogien2)
fire2.direction=argument2
i teraz ładne z tym skryptem działa ognisty miotacz
tu obiekt,z ktrego wydobywa się ogień w tym przypadku lewa rurka
obj_rura_ogniowa_lewa
create
GMLdirection=180 //nadaje ogniu kierunek lewy</span>step
GMLscr_Fire(x,y,(direction-5)+random(10),2)no i teraz chciałbym,żeby z odstępami miotacz się palił,a nie cały czas bez przerwy
-
Zarzuć dokładnym kodem (eksportuj do GMZ).
Gnysek to jest właśnie wyżej cały kod tego miotacza..ja myślę,że gdzieś w stepie muszę dać warunek żeby wiązka ognia paliła się dłużej,a nie pufała..
zrobiłem jeszcze do tego sprite w postać stożka..co nadał kształt wiązce ognia..ale jak mówię takie pufanie krótkie jest,a nie długa wiązka ognia.
-
Jeśli chodzi Ci tylko o to, żeby ogień był dłuższy, to tutaj:
GMLimage_alpha-=.03
Zmniejsz tę liczbę.
Właśnie to zrobiłem dałem mniejszą liczbę i dalej pufa...zamiast długiego płomienia:/ kurcze
Po za tym tym chyba przezroczystość się ustawia
-
Cześć wszystkim chciałbym stworzyć obiekt,pułapkę,który wypuszcza ogień(taką długą strugę ognia)
No i mam tutaj podobny kod,który skorzystałem z yoyogames,ale zamiast długą strugą ognia puszczać ,to obiekt pułapka puszcza mi krótko ogień...takie pufanie zamiast miotacza ognia...
Co jest nie tak?
tutaj kod ognia
obj_ogien
create
GMLspeed=1size=.05
sterp
GMLimage_angle+=4if size<1.5
size+=random(.01)+.01
if size>1
image_alpha-=.03
if image_alpha<=0
instance_destroy()
if speed<=4
speed+=.1
draw
GMLdraw_set_blend_mode(1)draw_sprite_ext(sprite_index,image_index,x,y,size,size,image_angle,c_white,image_alpha)
draw_set_blend_mode(0)
a tu obiekt,z którego ma wydobywać się czasowo struga ognia...
obj_rura_ogniowa_lewa
create
GMLstrzal=1;image_speed =0;
image_index =0;
alarm 0
GMLstrzal=1;step
GMLif( strzal ){
var i;
i = instance_create( x, y, obj_ogien );//tworzy ogien
i. direction=180 //nadaje ogniowi kierunek w lewa strone
i.speed = 5; //predkosc ognia
strzal = 0;
alarm[0] = room_speed * 0.4; //Odleglosc w czasie w jakim ma strzelac ogien
}
-
Cześć wszystkim
Od paru dni próbuje ustawić tekst w textboxie,które zaimportowałem sobie ze sklepu marketplace z yoyogames.com
Dokładnie ten
No i problem jest taki,że jak go zaimportuje do swojego projektu,to tekst mi się w nim nakłada na siebie..dziwna to sytuacja,bo jak np zaimportuje go do nowego projektu pustego,to jest normalnie,a w moim już nie.Próbowałem i czcionkę zmienić,ale to nic nie daje..
Tutaj kod textboxa
obj_textbox
create
GML/*skrypty, zawierają wszystkie niezbędne informacje na temat
wszystkich z poniższych funkcji.
*/
// Zainicjowanie silnika CTB
ctb_init();
// Oznaczenie tego obiektu jako pole tekstowe
ctb_create();
// Dodawanie kilku ikon
icon_typing = spr_ico_typing_small;
icon_finished = spr_ico_continue_small;
// Dodawanie kilku kolorow
ctb_add_color( "default", c_white );
ctb_add_color( "white", c_white );
ctb_add_color( "blue", c_blue );
ctb_add_color( "yellow", c_yellow );
ctb_add_color( "red", c_red );
// Dodawanie kilku czcionek
ctb_add_font( "default", f_normal );
ctb_add_font( "normal", f_normal );
ctb_add_font( "other", f_other );
// Dodawanie dzwieku
ctb_add_sound( "gun", snd_gun );
// Dodawanie niestandardowego polecenia, aby zmienić charakter obrazu
char_sprite = spr_char;
ctb_add_command( "char", command_char );
//Ustawiamy dopełnienie pola tekstowego
//Dodajemy duże lewe dopełnienie wstawiania sprite znaków w RHW tekstowym
ctb_set_padding( 116,10,10,10 );
// Ustawienie tla pola tekstowego
sprite_index = ctb_load_subimage( spr_textbox_slice9_subimages, room_width-128, 108 );
// Dodawanie tekstu w polu tekstowym
ctb_add_text( "W[c:blue]e[c:yellow]l[c:red]c[c:default]o[c:blue]m[c:red]e[c:yellow]![c:default]" );
ctb_add_text( "My name is John.#[pause:15]I will explain you what this textbox engine can do." );
ctb_add_text( "First, you should know that it works using [f:other][c:yellow][tags][f:default][c:default]." );
ctb_add_text( "Those [c:yellow]tags[c:default] will let you control some cool properties of your textbox." );
ctb_add_text(
"Some of them are [f:other]Fonts[f:default],[pause:30]"+
" [c:blue]Colors[c:default],[pause:30] [speed:0.1]Speed[speed:1],[pause:30]"+
" Sounds[sound:gun],[pause:30] pauses,[pause:30] or even custom commands that you can add!");
ctb_add_text( "Exciting, isn't it?" );
ctb_add_text( "All of them are available through the use of tags." );
ctb_add_text( "For example, to use a [c:blue]Color[c:default], you would use the [tag:off][c:<color_name>] or [color:<color_name>][tag:on] tags." );
ctb_add_text( "You can even use your own scripts in your own tags!" );
ctb_add_text( "For example, let's change my face for a second..." );
ctb_add_text( "[char:char2]Woah![pause:8]Woah![pause:8]Woah![pause:15]#What is going on!!!" );
ctb_add_text( "[char:char]Gosh, thank god it was only for one moment!" );
ctb_add_text( "Other cool features of the textbox are [c:yellow]Auto-Wrapping[c:default] and [c:blue]Auto-Overflow[c:default]." );
ctb_add_text( "[c:yellow]Auto-Wrapping[c:default] will automatically ajust the text to fit in the textbox." );
ctb_add_text( "You don't have to add any newline character." );
ctb_add_text( "Be warned that the textbox uses tags for newline, but also the [c:yellow][#][c:default] character." );
ctb_add_text( "To use the [#] character, you must use the [tag:off][#][tag:on] tag." );
ctb_add_text( "[c:blue]Auto-Overflow[c:default] means that if you add too much text, the overflowing text will automatically be added into the next page of the dialogue for you." );
ctb_add_text( "With those two automatic features, you don't have to worry about your text fitting in the textbox, the textbox takes care of all that for you." );
ctb_add_text( "With all that said,[pause:15]#I hope this little textbox will fit your games!" );
ctb_add_text( "Now I must take my leave." );
ctb_add_text( "Thanks for trying my textbox!" );
STEP
GMLctb_update();DRAW
GMLctb_draw();draw_sprite( char_sprite, 0, x+6, y+6 );
No i parę skryptów jest jeszcze..
Gdzieś tkwi bład..
na obrazku to wygląda tak:
-
-
GMLif file_exists("save.dat") {Ciekawi mi jeszcze po jakiego grzyba Ci otwieranie pliku tekstowego skoro używasz game_save?
file=file_text_open_append("save.dat");
} else if{ //<------ Do czego ten if?
file=file_text_open__write("save.dat"); //<------ ok pod warunkiem że dopiszesz kod zapisu a nie tak zostawisz
}
EdiePL podał Ci dobre rozwiązanie oprócz tego, że piszę się show_message, ale przed tym Cię sam przestrzegł.
Więc:
GMLif(file_exists("save.dat")){
game_load( "Save.dat" );
}else{
show_message("Nie znaleziono pliku zapisu.");
};
Dzieki..racja po co.mi otwieranie pliku.
To wrzucam do kolizji bohatera
-
Tak. Taki który będzie sprawdzał czy plik istnieje. Nie podam jaki bo dobrze Ci zrobi poszukanie tego na własną rękę.
No dobra tylko nie wiem,czy dobrze myśle??
GMLif file_exists("save.dat") {file=file_text_open_append("save.dat");
} else if{
file=file_text_open__write("save.dat");
}
-
Tak. Taki który będzie sprawdzał czy plik istnieje. Nie podam jaki bo dobrze Ci zrobi poszukanie tego na własną rękę.
Threef Kurcze to akurat jest dla plików txt chyba o to chodzi
GMLfile_exists(fname)do plików .dat nie mogę znaleźć
-
Podczas wczytywania w żaden sposób nie zabezpieczasz się przed ewentualnością gdy nie ma pliku.
Czy wystarczy tu dać jakiś warunek,który by to sprawdzał??
-
Cześć wszystkim
Mam taki dziwny problem z zapisem gry.
Gdy gra nie jest zachowana przez gracza podczas gry (prościej dopóki nie zbierze się obiektu save) to wywala błąd fatalny i wyłącza grę natomiast gdy stan gry jest już zachowany i zbierzemy obiekt save to wtedy błędu nie ma. Zawsze jest ten błąd gdy nie zachowaliśmy gry, a chcemy ją wczytać w menu.
Ja myślę,że trzeba sprawdzić czy plik jest pusty jak jest pusty to komunikat i nic nie robi, a jak pełny to wczytuje(dodać warunek)jak to zrobić?
niżej kod mojego obiektu_save,który zapisuje moją grę w danym miejscu.
CREATE
GMLlicznik=x/14;checked = false; //sprawdzenie
list = ds_list_create(); //lista zachowujaca stan gry
saveInfo=false; //informacja o zachowaniu gry
saveInfoTime=3; //infroamcja o czasie zachowania gry
ALARM 0
GMLsaveInfo=false;DRAW
GMLdraw_self();if (saveInfo)
{
draw_text(x, y, "save game has been completed")
}
kolizja z bohaterem
GMLif( !checked ){
checked = true;
game_save("Save.dat"); //gre zachowywana pod nazwa pliku Save.dat
if (!saveInfo)
{
saveInfo=true;
audio_play_sound(dzwiek_checkpointisave, 1, false);
alarm[0]=saveInfoTime*fps; //czas * ilosc FPS prosty wzor do zachowania stanu gry
}
}
a tu przycisk obj_load game,który ładuje mi zapis gry
STEP
GMLif (room !=roo_menu && mouse_check_button_pressed(mb_left)){
//nie rob nic
}
else if (position_meeting(obj_cursor.x,obj_cursor.y,obj_load_game)) && mouse_check_button_pressed(mb_left) //Gra wczytuje zachpowanie dopiero gdy nacisniemy na Load Game prawym myszy** nie gdy naciskamy w wolne pole pokoju menu
{
game_load( "Save.dat" );
audio_stop_sound (dzwiek_menu_glowne_gry);
}
teraz tak w STEP jeszcze mam:
Bloczek wybrany Execute Script
Applies to ustawione na Self
script: scr_mouse_hover
-
Musisz dodać warunek że
GMLobj_player.y>y
Dzięki pomogło kt117;)
dałem tak:
GMLif obj_player.y>y-sprite_xoffset -
A to przypadkiem nie zależy od tego że wszystkie te spadające obiekty mają taki sam ID i jak przypisujesz nowy trigger do obiektu to zmienia się we wszystkich o tym samym ID?
Niby jak mogę mieć ten samo Id skoro każdy jest rozstawiony w innej części mapy..
ok zmieniłem zmienną teraz nazywa się spadanie
Może to być problem w tym,że jak np kolce są pod platformą spadające to tak spadną mimo,że nie znajduje się pod nimi,a nad nimi..w czym problem jest?
One mają spadać tylko wyłącznie jak się znajdę pod nimi,a nie nad nimi..
obj_spadajace_kolce
Create
GMLimage_speed = 0;vspd = 4;
spadanie = 0;
Step
GML//funkcja odpowiadajaca za spadanie obiektuif instance_exists(obj_player)
{
if obj_player.x>x-sprite_xoffset && obj_player.x<x+sprite_xoffset
{
spadanie = 1
}
if (spadanie == 1)
{
y += vspd;
}
if (place_meeting(x, y + vspd, par_solid))
{
instance_destroy();
}
//zderzenie gracza
scr_death();
}
-
Gdzieś musisz ustawiać zmienną trigger dla wszystki platform albo dla ich parenta, ewentualnie zmień nazwe zmiennej trigger na inną.
No dobra powalczę z tym,bo kurcze nie chce mi się robić multi obiektów spadających...
-
No dobra...wszystko działa bardzo dobrze..ale teraz np chcę więcej tych obiektów spadających porozstawiać na danej scenerii no i problem w tym,że do jakichkolwiek na mapie rozstawionych tych kolców spadających podejdę,to wszystkie opadają nawet te co nie widzę ich,co są w innym miejscu scenerii..A mają przecież opadać tylko te pod którymi się znajduje,a nie wszystkie na mapie.
Jest na to inny sposób niż robić kopie tego obiektu..(bo w końcu korzysta z tego samego sprita) ,ale wtedy musiałbym dużo zrobić kopii inaczej nazwać pododawać mnóstwo kolizji do bohatera..a to bez sensu..
Step
GML//funkcja odpowiadajaca za spadanie obiektuif instance_exists(obj_player)
{
if obj_player.x>x-sprite_xoffset && obj_player.x<x+sprite_xoffset
{
trigger = 1
}
if (trigger == 1)
{
y += vspd;
}
if (place_meeting(x, y + vspd, par_solid))
{
instance_destroy();
}
//zderzenie gracza
scr_death();
}
Create
GMLimage_speed = 0;vspd = 7;
trigger = 0;
-
W Create daj
GMLimage_speed=0//bo ma stać na początku
kt117 dzięki...a myślałem,że to trzeba w alarmie zrobić..
świetnie działa;)
-
Dzień dobrym wszystkim
Mam znikająca platformę wszystko ładnie działa,ale do platformy,która znika zrobiłem animację w paru krokach taki efekt zanikania..no i teraz...próbuje zrobić tak żeby animacja tej platformy uruchomiła się dopiero jak wskoczę na tą platformę,bo obecnie cały czas się uruchamia..
o to mój kod platformy
ALARM 0
GMLinstance_change(obj_znikajacy,true);STEP
GMLif ( place_meeting( x, y - 1, obj_player ) ){
image_speed = 0.15;
if ( alarm[0] <= 0 )
{
alarm[0] = room_speed*1; // tu ustawiamy czas po jakim ma platforma zniknac
}
}
CREATE
GML//image_speed = 0.15;// tu chwilowo animacje wyłączyłem,bo mi non stop bezmyślnie migało..Rozumiem,że w alarmie musze to ustawić?? że jak wskoczę na platformę włączy się animacja tej platformy i zniknie tak jak jest w kodzie w stepie ustawione.
-
Yo kt, maska kolizji też się obraca. Da radę to zrobić bez kombinowania. ;)
Dobra chłopaki poradziłem sobie
w create dałem jeszcze licznik=0;
i teraz jest dobrze;)
dzięki jeszcze raz za pomoc;)
-
Nie no spokojnie chłopaki wystarczy mi normalny ruch wahadłowy;) lewo prawo;) huśtanie;)
obiekt narysowałem jako jedną całość i cały ma się huśtać nie duł...
dobra to tak w step daje
step
GMLlicznik+=0.4odchyl=20
image_angle=sin(licznik)*odchyl
???
-
No to pokaż może jakieś fragmenty kodu gdzie coś się dzieje z hp? Na ślepo to możemy wieki rozmyślać.
Dzięki Threef Kt117 temat zamknięty..okazało się,że przyczyną był zbyt krótki pasek bohatera...zwiększyłem go i jest już dobrze dostaje od razu obrażenia..
dzięki za pomoc.
-
Tak dokładnie tak! to ma tylko i wyłącznie miejsce jak mam pełne HP
Tabela osiągnięć
w Pytania początkujących
Opublikowano
Witam wszystkich
stworzyłem sobie tabele wyników..i w osobnym pokoju (bo tam mam ten obiekt)wyświetla mi parę pozycji między innymi imię,ilość zabitych wrogów,ilość monet zebranych i ilość punktów zgromadzonych.
No,ale teraz chciałbym,żebym mógł dokonywać wpisu w momencie,kiedy zginę w grze i jak osiągnę odpowiednią ilość punktów,(bo ustawione mam tak sortowanie względem punktów) to wyświetli się informacja z podaniem swojego imienia i nastąpi wpis ,który wyświetli się w osobnym pokoju,i po tym pokój game over,a jak nie będę miał wystarczającej ilości punktów,to tylko tabelka pojawi się z wynikami.a potem plansza game over.
Walczę z tym i nie wiem jak to rozgryźć..
jeśli chodzi o moje zmienne w grze to mam globalne,czyli global.life,global,coins,global.pScore
tutaj kod mojej tabelki wyników,która jest w osobnym pokoju..
create
temp_hiscore_list = ds_list_create();
hiscore_pos_lenthg = 4;
hiscore_max_list_length = 10;
hiscore_sort_by = 3;
name = "John";
kills = 3;
coins = 5;
points = 7;
ds_list_add(hiscore_list,name);
ds_list_add(hiscore_list,kills);
ds_list_add(hiscore_list,coins);
ds_list_add(hiscore_list,points);
name = "Sean";
kills = 3;
coins = 11;
points = 2;
ds_list_add(hiscore_list,name);
ds_list_add(hiscore_list,kills);
ds_list_add(hiscore_list,coins);
ds_list_add(hiscore_list,points);
name = "Bob";
kills = 17;
coins = 5;
points = 1;
ds_list_add(hiscore_list,name);
ds_list_add(hiscore_list,kills);
ds_list_add(hiscore_list,coins);
ds_list_add(hiscore_list,points);
name = "Jimmy";
kills = 3;
coins = 3;
points = 21;
ds_list_add(hiscore_list,name);
ds_list_add(hiscore_list,kills);
ds_list_add(hiscore_list,coins);
ds_list_add(hiscore_list,points);
step
do
{
var temp_highest_points = 0;
for(p = 0; p < ds_list_size(hiscore_list); p += hiscore_pos_lenthg)
{
points = ds_list_find_value(hiscore_list, p + 3);
if points > temp_highest_points
{temp_highest_points = points}
}
var highest_position = 0;
highest_position = ds_list_find_index(hiscore_list, temp_highest_points);
name = ds_list_find_value(hiscore_list, highest_position -3);
kills = ds_list_find_value(hiscore_list, highest_position -2);
coins = ds_list_find_value(hiscore_list, highest_position -1);
points = ds_list_find_value(hiscore_list, highest_position);
ds_list_add(temp_hiscore_list,name);
ds_list_add(temp_hiscore_list,kills);
ds_list_add(temp_hiscore_list,coins);
ds_list_add(temp_hiscore_list,points);
repeat (4) {ds_list_delete(hiscore_list, highest_position -3)};
}
until ds_list_size(hiscore_list) = 0;
//sortowanie tabeli osiagniec
ds_list_copy(hiscore_list,temp_hiscore_list);
draw
var topy = 20;
var xspacing = 200;
var yspacing = 5;
for(p = 0; p < ds_list_size(hiscore_list); p += hiscore_pos_lenthg)
{
name = ds_list_find_value(hiscore_list, p + 0);
kills = ds_list_find_value(hiscore_list, p + 1);
coins = ds_list_find_value(hiscore_list, p + 2);
points = ds_list_find_value(hiscore_list, p + 3);
draw_text(leftx + xspacing * 0, topy + yspacing * p,
string(ceil(p/hiscore_pos_lenthg)) + ".");
draw_text(leftx + xspacing * 1, topy + yspacing * p,
"name : " + string(name));
draw_text(leftx + xspacing * 2, topy + yspacing * p,
"kills : " + string(kills));
draw_text(leftx + xspacing * 3, topy + yspacing * p,
"coins : " + string(coins));
draw_text(leftx + xspacing * 4, topy + yspacing * p,
"score : " + string(points));
}