Skocz do zawartości

Życia w grze - GM:S


Cygnus

Rekomendowane odpowiedzi

Cześć wszystkim stworzyłem sobie obiekt controler a w nim życia ustawiłem startowo na 5 żyć no i ładnie obiekt wyświetla się w prawym górnym rogu,ale teraz chciałbym,żeby te życia zmieniały się np jeśli zbiorę 100 monet to zwiększy się o jedno życie,a jeśli spadnę na kolce to zmniejszy się o jedno,a jak wróg mnie dotknie,to najpierw energia się zmniejszy aż do poziomu takiego,że odejmie mi jedno życie itd.Jak to zrobić? tu pokaże część kodu wroga mojego obj_enemy_bulwa

 

Event-kolizja z obj_player

GML
///Zgniecenie

if other.y < y && other.vspd > 0 && other.hurtClock == 0 && skok==0{

skok+=1;

hp-=10;

other.vspd = -12;

with instance_create(x,y,obj_entity_die) {

sprite_index = sprWrogGinie; //dodatkowa animacja wroga kiedy ginie gdy sie na niego naskoczy

image_xscale = other.image_xscale;

hspd = other.hspd;

vspd = other.vspd;

}

}

 

 

 

 

 

 

else if other.y < y && other.vspd > 0 && other.hurtClock == 0 && skok==1{

other.vspd = -12;

hp-=10;

with instance_create(x,y,obj_entity_die) {

sprite_index = sprWrogGinie; //dodatkowa animacja wroga kiedy ginie gdy sie na niego naskoczy

image_xscale = other.image_xscale;

hspd = other.hspd;

vspd = other.vspd;

if (global.life > 0)

{

global.life -=1;

instance_create(room_width/2,room_height/2,obj_player);

}

 

}

instance_destroy();

}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

no to co to za filozofia

 

GML
if( global.coins >= 100 )

{

global.coins -= 100;

global.life += 1;

}

 

w evencie kolizji z kolcami

GML
global.life -= 1;

 

a z energią to nie wiem dokładnie jaki efekt chcesz osiągnąć

Odnośnik do komentarza
Udostępnij na innych stronach

GML
GMLif (kolizja z wrogiem){ ///nie wiem nie znam sie na kolizjach

global.energy-=1}; //czy o ile tam chcesz//

if global.energy<1 {

global.life-=1

energy=100}; ////100 dałem przykładowo, tu ustawisz maksymalną wartość energii

 

chyba coś takiego, analogiczne do coins tylko w drugą stronę.

Niestety jak już pisałem; albo dasz to w colision event z wrogiem albo wymyśl swoje kolizje, ja ich nie opanowałem:p.

 

 

albo lepiej:

 

GML
if global.energy<1 {

global.life-=1

global.energy=100};

/////////////////////////////

colision event with "wróg"

global.energy-=1

 

pamietaj że ilość energi jaka ubędzie na sekundę będzie taka sama jak ilość stepów w room options>settings

Odnośnik do komentarza
Udostępnij na innych stronach

no to co to za filozofia

 

GMLif( global.coins >= 100 )

{

global.coins -= 100;

global.life += 1;

}

 

w evencie kolizji z kolcami

GMLglobal.life -= 1;

 

a z energią to nie wiem dokładnie jaki efekt chcesz osiągnąć

 

ANtY dzięki;)

z Energią to taki efekt chcę osiągnąć,że jeśli wskaźnik energii osiągnie 0 to odejmie mi życie o tak,czyli np jak podejde do wroga i wróg zada mi obrażenia energia mi się zmniejsza,a kiedy całkowicie mi się zmniejszy,wtedy tracę życie,o taki efekt mi się rozchodzi.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

no to

 

w evencie kolizji z przeciwnikiem

 

GML
global.energy -= 30;

 

w stepie postaci, czy kogokolwiek w sumie:

 

GML
if( global.energy <= 0 )

{

global.energy = 100;

global.life -= 1;

}

 

edit:

 

jak chcesz, żeby ta energia się odnawiała to w stepie

 

GML
if( global.energy < 100 )

global.energy += 0.1;

else

global.energy = 100;

Odnośnik do komentarza
Udostępnij na innych stronach

no dobra to gdzie mam to wpisać tą opcje,żeby wróg w momencie ,kiedy energia się skończ zabrał jedno życie i żebym zaczynam od początku tego pokoju w którym się obecnie znajduje?

to teraz tak na przykładzie mojego kodu:

 

Event-kolizja z obj_player

GML
///Zgniecenie

if other.y < y && other.vspd > 0 && other.hurtClock == 0 && skok==0{

skok+=1;

hp-=10;

other.vspd = -12;

with instance_create(x,y,obj_entity_die) {

sprite_index = sprWrogGinie; //dodatkowa animacja wroga kiedy ginie gdy sie na niego naskoczy

image_xscale = other.image_xscale;

hspd = other.hspd;

vspd = other.vspd;

}

}

 

 

 

 

 

 

else if other.y < y && other.vspd > 0 && other.hurtClock == 0 && skok==1{

other.vspd = -12;

hp-=10;

with instance_create(x,y,obj_entity_die) {

sprite_index = sprWrogGinie; //dodatkowa animacja wroga kiedy ginie gdy sie na niego naskoczy

image_xscale = other.image_xscale;

hspd = other.hspd;

vspd = other.vspd;

if (global.life > 0)

{

global.life -=1;

instance_create(room_width/2,room_height/2,obj_player);

}

 

}

instance_destroy();

}

Odnośnik do komentarza
Udostępnij na innych stronach

Może tak tu są obrażenia jakie wróg zadaje mojemu bohaterowi czyli:

 

obj_player a w nim event i kolizja z wrogiem czyli obj_enemy

 

event

 

GML
if !vspd > 0 && hurtClock == 0 && other.hurtClock == 0 && sign(x-other.x) == other.image_xscale {

hp -= 15;

hurtClock = room_speed;

vspd = -8;

hspd = sign(x-other.x)*16;

}

Odnośnik do komentarza
Udostępnij na innych stronach

a tu mój stworzony obj_game_controler i wszystko co w nim jst zawarte,to on głównie odpowiada za te funkcje:

 

 

CREATE

GML
///Setup

global.pScore = 0;

global.life = 5;

 

globalvar spawnX, spawnY;

//View

globalvar gvX, gvY, gvW, gvH, gvObj, gvOffX, gvOffY;

gvX = view_xview[0];

gvY = view_yview[0];

gvW = view_wview[0];

gvH = view_hview[0];

gvObj = view_object[0];

gvOffX = 0;

gvOffY = 0;

//HUD

hpHUD = 0;

maxHpHUD = 0;

 

END STEP

GML
///View

if view_wview[0] != gvW || view_hview[0] != gvH {

var tempW, tempH;

tempW = view_wview[0];

tempH = view_hview[0];

 

if gvW/view_wport[0] >= gvH/view_hport[0] {

view_hview[0] = lerp(view_hview[0],gvH,.3);

view_wview[0] = view_hview[0]/view_hport[0]*view_wport[0];

} else {

view_wview[0] = lerp(view_wview[0],gvW,.3);

view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0];

}

 

view_xview[0] -= (view_wview[0]-tempW)/2;

view_yview[0] -= (view_hview[0]-tempH)/2;

}

 

if view_wview[0] > room_width {

view_wview[0] = room_width;

view_hview[0] = view_wview[0]/view_wport[0]*view_hport[0];

}

if view_hview[0] > room_height {

view_hview[0] = room_height;

view_wview[0] = view_hview[0]/view_hport[0]*view_wport[0];

}

 

if instance_exists(gvObj) {

gvX = min(max(0,gvObj.x+gvOffX-view_wview[0]/2),room_width-view_wview[0]);

gvY = min(max(0,gvObj.y+gvOffY-view_hview[0]/2),room_height-view_hview[0]);

 

gvOffX = 0;

gvOffY = 0;

}

 

view_xview[0] = round(min(max(0,lerp(view_xview[0],gvX,.15)),room_width-view_wview[0]));

view_yview[0] = round(min(max(0,lerp(view_yview[0],gvY,.15)),room_height-view_hview[0]));

 

gvW = gvWStart;

gvH = gvHStart;

 

//Backgrounds

for(i=0;i<8;i++) {

if background_visible == true || background_foreground == true {

//Horizontal

if background_width != room_width {

background_x = view_xview[0]/(room_width-view_wview[0])*(room_width-background_width);

}

//Vertical

if background_height != room_height {

background_y = view_yview[0]/(room_height-view_hview[0])*(room_height-background_height);

}

}

}

 

Room start

GML
///Destroy self

if string_copy(room_get_name(room),0,9) != "roo_world"

 

{ //wyszukiwwanie nazw map z poaczatkiem roo_world

instance_destroy();

}

 

 

GML
///View

globalvar gvXStart, gvYStart, gvWStart, gvHStart, gvObjStart;

gvXStart = view_xview[0];

gvYStart = view_yview[0];

gvWStart = view_wview[0];

gvHStart = view_hview[0];

gvObjStart = view_object[0];

 

if instance_exists(gvObj) {

view_xview[0] = min(max(0,gvX),room_width-view_wview[0]);

view_yview[0] = min(max(0,gvY),room_height-view_hview[0]);

}

 

DRAW GUI

 

GML
///Draw player HUD

draw_set_color(c_white);

draw_text(49, 88, string(" Score: " + string(global.pScore)));

 

var __guiW = display_get_gui_width(), __guiH = display_get_gui_height();

draw_sprite(spr_healthbar,0,0,0);

draw_text(64, 64, string(" Lives: " + string(global.life)));

if instance_exists(par_player) {

hpHUD = lerp(hpHUD,par_player.hp,.5);

maxHpHUD = par_player.maxHp;

 

with obj_player {

var _offset;

_offset = 0;

 

draw_set_font(fnt_pwrup);

draw_set_valign(fa_bottom);

draw_set_halign(fa_center);

draw_set_color(c_white);

 

if pwrupSpd > 0 {

draw_sprite_ext(spr_pwrup_speed,0,__guiW-26,29+35*_offset,1,1,0,c_gray,.5);

draw_text(__guiW-26,29+35*_offset,string(ceil(pwrupSpd/room_speed)));

_offset++;

}

if pwrupStr > 0 {

draw_sprite_ext(spr_pwrup_strength,0,__guiW-26,35+35*_offset,1,1,0,c_gray,.5);

draw_text(__guiW-26,35+35*_offset,string(ceil(pwrupStr/room_speed)));

_offset++;

}

if pwrupJmp > 0 {

draw_sprite_ext(spr_pwrup_jump,0,__guiW-26,28+35*_offset,1,1,0,c_gray,.5);

draw_text(__guiW-26,28+35*_offset,string(ceil(pwrupJmp/room_speed)));

_offset++;

}

}

} else {

hpHUD = lerp(hpHUD,0,.5);

}

 

draw_sprite_part(spr_healthbar,1,4,0,91/maxHpHUD*hpHUD,32,4,0);

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

w step gracza:

 

GML
if( global.energy <= 0 )

{

global.energy = 100;

global.life -= 1;

room_restart();

}

 

 

staraj się nie zlepiać 1000 kawalków kodu, którego zupełnie nie rozumiesz, tylko próbować to od podstaw napisać chociaż jakieś podstawowe elementy, żebyś wiedział w ogóle co się dzieje w tym kodzie twojej gry

 

bo to co tu wklejasz, nawet w sumie nie wiedząc co odpowiada za umieranie gracza to niezły bajzel

Odnośnik do komentarza
Udostępnij na innych stronach

no to

 

w evencie kolizji z przeciwnikiem

 

GMLglobal.energy -= 30;

 

w stepie postaci, czy kogokolwiek w sumie:

 

GMLif( global.energy <= 0 )

{

global.energy = 100;

global.life -= 1;

}

 

edit:

 

jak chcesz, żeby ta energia się odnawiała to w stepie

 

GMLif( global.energy < 100 )

global.energy += 0.1;

else

global.energy = 100;

 

 

 

ta opcja global.energy nie działa u mnie

chyba ,ze gdzies musze to stworzyc?

 

GML
global.energy

 

GML
if( global.energy <= 0 )

{

global.energy = 100;

global.life -= 1;

room_restart();

}

 

 

to u mnie nie działa,być może muszę to w obj_game_controler wpisać,bo nie istnieje u mnie global.energy

Odnośnik do komentarza
Udostępnij na innych stronach

Zmień w step gracza na to:

GML
if( hp <= 0 )

{

hp = 100;

global.life -= 1;

room_restart();

}

 

Czytałeś ty w ogóle to co kopiowałeś? Chyba nie bo w innym wypadku na 100% byś zauważył że obj_player posiada już zmienną odpowiadającą za energię czyli zmienna "hp"

Odnośnik do komentarza
Udostępnij na innych stronach

Faktycznie hp!

 

Dzięki Lord życia już działają;) jesteś wielki;) no dobra to teraz

jeszcze jak zrobić żeby w momencie zebrania 100monet np otrzymam jedno życie,oraz gdy osiągnę wartość 0 żyć to gra się kończy Game Over

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

o monetach już pisałem dużo postów temu:

 

GML
if( global.coins >= 100 )

{

global.coins -= 100;

global.life += 1;

}

 

game over:

GML
if( global.life <= 0 )

{

room_goto( room_main_menu ); //albo podaj tu jakiś inny room, np. z ekranem game over

}

Odnośnik do komentarza
Udostępnij na innych stronach

No a teraz jeszcze taka sprawa

 

wszystko ładnie działa z tymi monetami bohater je zbiera i jak uzyska 100monet to daje mu się życie...a co teraz zrobić,bo w momencie,kiedy bohater zginie,a wcześniej zbiorę w danym miejscu monety,to powinno ich już w tym miejscu nie być,a są,jak to zrobić że jak zgine i zbiorę wcześniej monety,to później ich już tam nie ma.

 

 

GML
if( global.coins >= 100 )

{

global.coins -= 100;

global.life += 1;

}

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli, że resetujesz room.

Po prostu bohatera cofnij do innej pozycji. Będzie najprostsze.

Jeśli chcesz resetować room musisz się np w controlerze pobawić i zrobić coś takiego, że wczytujesz z niego czy zebrałeś tę monetę, czy nie.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

dokladnie

 

dodaj w create postaci:

 

GML
start_x = x;

start_y = y;

 

i zmien umieranie na: (w stepie gracza)

 

GML
if( hp <= 0 )

{

hp = 100;

global.life -= 1;

x = start_x;

y = start_y;

}

 

a z resetowaniem rooma to byś musiał bardziej pokombinować, musiałbyś dla wszystkich monetek zapisywać, czy zostały zebrane, czy nie, i na starcie rooma to wczytywać, lepiej poczekaj z tym na programistę :P

Odnośnik do komentarza
Udostępnij na innych stronach

dokladnie

 

dodaj w create postaci:

 

GMLstart_x = x;

start_y = y;

 

i zmien umieranie na: (w stepie gracza)

 

GMLif( hp <= 0 )

{

hp = 100;

global.life -= 1;

x = start_x;

y = start_y;

}

 

a z resetowaniem rooma to byś musiał bardziej pokombinować, musiałbyś dla wszystkich monetek zapisywać, czy zostały zebrane, czy nie, i na starcie rooma to wczytywać, lepiej poczekaj z tym na programistę :P

 

ANtY i chyba będę musiał poczekać na mojego programistę z projektu;) ale pokombinuje z tym trochę zrobię tak jak napisałeś dzięki brachu;)

Odnośnik do komentarza
Udostępnij na innych stronach

Ale zobacz Herr Kaktus;) jak wrogów się ożywi,to nie jest zamierzony cel,ponieważ chodzi mi o to,żeby nie było już w danym miejscu monet jak je wcześniej zebrałem i zginę o o to mi chodzi.

 

Dzięki Panowie jest tak jak powinno być;)

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