Skocz do zawartości

poziomy trudności w grze


pankracy

Rekomendowane odpowiedzi

Rozumiem...ale jak to ma się do ruchu wroga?i siły obrażeń jaką ma nam zadawać na danym trudności poziomie, bo tego nie mogę zrozumieć...wiem,że mam to zdefiniować albo w osobnym obiekcie na mapie,albo jak już robię w CREATE bohatera ok to jeszcze jest zrozumiałe.

Tu zablokowałem się...

 

 

Teraz to co dałeś przykład wyżej to przyspieszy ruch bohatera o te 3.kiedy ruszymy w prawo.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Bo dałem tylko przykład. Analogicznie do tego przykładu robisz ruch wroga i siłę obrażeń. Nie definiujesz tego w osobnym obiekcie (możesz ale po co?). Piszesz to w obiekcie wroga, prawdopodobnie w stepie, lub gdziekolwiek masz napisany kod ruchu i zadawania obrażeń. Spróbuje napisać coś z pamięci:

 

obj_enemy

//Create
alarm[8] = -1;

//Step
if(place_meeting(x, y, obj_Player) and alarm[8] == -1)
{
	if(global.dificulty == "easy") then obj_Player.hp -= 10;
	if(global.dificulty == "medium") then obj_Player.hp -= 20;
	if(global.dificulty == "hard") then obj_Player.hp -= 30;

	alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
}

//Alarm[8]
/*komentarz tylko po to, aby alarm był włączony*/

Co do szybkości chodzenia wroga, to możesz tylko zdefiniować zmienną pomocniczą spd i przypisujesz wszędzie tak, gdzie masz hspeed, a później tylko zmieniasz spd co do poziomu trudności

Odnośnik do komentarza
Udostępnij na innych stronach

W stepie wroga mam zdefiniowany ruch wroga..natomiast w osobnym obiekcie przypisanym jako obiekt dziedziczący mam zdefiniowane obrażenia jakie zadaje wróg bohaterowi,ale hmmm..zastanawiam się,czy to zadziała SimianVirus7?

Chociaż to ma sens przyjacielu...

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ostatecznie tak musi być;-) i teraz w końcu działa;-)

na poziomie easy bohater jest na 6 strzałów na poziomie medium na 4 strzały i na poziomie hard na 3 strzały

Poziom energii na poziomie easy i medium 100% a na hard 80%

obj_enemy

 

CREATE

 

alarm[8] = -1;

 

 

 

STEP

 

if(place_meeting(x, y, obj_player) and alarm[8] == -1)
{
if(global.difficulty == "easy") && obj_player then global.hp -= 10; //6 uderzen wroga    
if(global.difficulty == "medium") && obj_player then global.hp -= 40;//4 uderzenia wroga
if(global.difficulty == "hard") && obj_player then global.hp -= 30;//3 uderzenia wroga

alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
}

Teraz walczę z tą zmienną pomocniczą spd=8;

najprościej to zdefiniować w create prędkość z jaką ma się poruszać wróg czyli:

 

CREATE

 

spd=4;

a w stepie wroga odpowiednio dla danego poziomu ustawić spd?

 

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, a create ustawiasz spd=4. 

Teraz w step wszędzie tam gdzie masz definiowaną szybkość poruszania się np. hspeed = 6 to zamieniasz cyfrę (tutaj 6) na zmienną spd czyli hspeed = spd. I tak w całym kodzie. Teraz możesz komfortowo zmieniać szybkość poruszania się wroga tylko w jednym miejscu. Mianowicie na samym początku w step robisz tak:

"If(global.dificulty=="easy") then spd=3;

If(global.dificulty=="medium") then spd=5;

If(global.dificulty=="hard") then spd=7;

 

Odnośnik do komentarza
Udostępnij na innych stronach

SimianVirus7 ;-) nie mam akurat tak..jest zdefiniowany speed i przypisana prędkość w tym przypadku speed=4; hspeed jest,ale zobacz jak to wyżej wygląda w stepie wroga

 

Obj_Enemy

 

STEP

 

 
///Poruszanie sie
///AI wroga porusza sie i jak nas widzi to zaczyna nas gonic az znikniemy z jego pola widzenia
//i powraca na miejsce,gdzie zobaczyl nas po raz perwszy


//if(point_distance(xstart,0,obj_player.x,0) <= 250)
if(instance_exists(obj_player) && action!=stan.patrol && collision_line(x,y,obj_player.x,obj_player.y,obj_niewidzialny,0,1)) {
    if(follow>room_speed/2) {
        follow=0
    }
    image_speed=0
    image_index=0
    action=stan.wait
} else if (instance_exists(obj_player) && distance_to_object(obj_player)<=250 && abs(y-obj_player.y)<64 && follow>=room_speed/2 && image_xscale-sign(obj_player.x-x)=0 && !collision_line(x,y,obj_player.x,obj_player.y-12,obj_niewidzialny,0,1)) {
    action=stan.follow
    follow=30
} 

if(action=stan.wait) {
    image_speed=0
    image_index=0
    follow++
    if(follow>room_speed/2) {
        action=stan.patrol
        follow=0
    }
} else {
    image_speed=0.3
}

if(action=stan.patrol) {
    follow++
}

if (place_free(x,y+1))
{gravity = 0.5}
else
{gravity = 0}

if at=1
{
at=2
speed=4
}

if at=2 {
    if (hspeed<0) {
        image_xscale = -1;
        if (!place_meeting(x-30,y+10,par_solid ) or place_meeting(x-1,y,par_solid )) {
            speed*=-1
            st=1
            if(action=stan.follow) {
                action=stan.wait
            }
        }
    } else if (hspeed>0) {
        image_xscale = 1;
        if (!place_meeting(x+30,y+10,par_solid ) or place_meeting(x+1,y,par_solid )) {
            speed*=-1
            st=2
            if(action=stan.follow) {
                action=stan.wait
            }
        }
    }
}

//Podazanie za graczem
if(action=stan.follow && follow>0) {
    follow=max(0,follow-1)
    if(instance_exists(obj_player) && distance_to_object(obj_player)>3) {
        move_towards_point(obj_player.x,y,min(5,abs(obj_player.x-x)));
    }
} else if(action=stan.patrol && distance_to_point(xstart,ystart)>2) {
    speed=4
} else if(action=stan.wait) {
    speed=0
}

//ginie wrog
if hp<0
{
instance_destroy()
}


//Gdy wrog zostaje atakowany mruga
if global.zegarObrazenWroga > 0 {
 visible = !visible;
 global.zegarObrazenWroga -= 1;
} else {
 visible = true;
}

if hp <= 0  {
 
 instance_destroy();
 
 dead = true; //wywolujemy alarm gdy wrog jest martwy
 
  
 //tworzymy losowa ilosc punktow po zabiciu wroga,oraz napis,ktory sie nad nim wyswietla z iloscia punktow losowych 
  z = instance_create(x,y-10,obj_floating_txt);
  global.pScore+=pointvalue
  z.txt = "$" + string(pointvalue);
  z.yspeed = -4;
  
  
  
  //instance_create(x,y-50,choose(obj_coin,obj_diamencik,obj_trzy_poduszki,obj_serducho,obj_motyl,obj_gwiazdka,obj_ksiezyc)) // daje losowy item np monety albo jabłuszka
  with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_bandyta_ginie)  {
  //sprite_index = sprWrogGinie;  //sprite do poruszania sie wroga
  image_xscale = other.image_xscale;
  image_yscale = other.image_yscale;
  hspd = other.hspd;
  vspd = other.vspd;
    audio_play_sound(dzwiek_wrog_ginie, 1, false); //odtwarzamy dzwiek przy smierci wroga
 }
}

// czasowy respawn wrogow troche pomeczyles sie ale dziala jak trzeba :)
if (dead == true)
{
 //obj_spawn.dead = true; //respawn zabitego wroga jak nie bedzie dzialac to wtedy dead=true i wpisac instance_create(x,y,obj_spawn)
 
 instance_create(x,y,obj_spawn_bandyta);

}

// poziom trudnosci 

//obrazenia jakie zadaje nam wrog na danym poziomie
if(place_meeting(x, y, obj_player) and alarm[8] == -1)
{
if(global.difficulty == "easy") && obj_player then global.hp -= 10;//6 uderzen wroga    
if(global.difficulty == "medium") && obj_player then global.hp -= 40;//4 uderzenia wroga
if(global.difficulty == "hard") && obj_player then global.hp -= 30;//3 uderzenia wroga

alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
}

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Pytanie też mam do Gnyska;-) do mentora forum zawodowca niczym Leona;-)

wspomniałeś,że zmienne definiujesz wcześniej , na początku gry...mam rozumieć,że tworzyć dowolny obiekt wrzucasz tam kod i umieszczasz go na danym etapie gry w roomie?

 

SimianVirus7 i Gnysek dziękuje wam bardzo za pomoc...Kurcze żeby nie wy to leżałbym z tym jak pies na szczepieniu;-)

Odnośnik do komentarza
Udostępnij na innych stronach

Mam też takie pytanie..nie wiem,czemu tak się dzieje...

w chwili kiedy odkomentuje zmienną global.hp=100; (bo jest ona zadeklarowana niżej w kodzie) to jak ginę od wrogów mając np żyć obojętnie ile czy to 7 5 czy 3 od razu odejmuje wszystkie życia i przeniesie mnie na początek planszy bo tak mam to ustawione i za chwile bohater obraca się do góry nogami i cały czas ginie i spada a na pasku HUD pokazuje się x-1 x-2 x-3 i tak cały czas nie liczyłem ale do x-9 też doszło..co jest nie tak?

 

Jak mam włączoną zmienną w Create Bohatera global.hp=100; to jest ok,ale wtedy nie mogę ustawić mniej energii na innym poziomie jakim chce np na hard chciałem 80% energii

 

obj_player

 

CREATE

 

/// Glowne deklaracje zmiennych Anatola
                     
                     //////////////////////////////
                    ///////ZMIENNE STALE//////////
                    /////////////////////////////
///Ustawienia
event_inherited();
zbieranie=true;
eksplozja = false;
zasiegEksplozji = 22;
silaEksplozji = 10;


global.damage=0; //zmienna odzpowiedzialna za obrazenia zadawane po upadku z duzej wysokosci
global.hp = 100;
global.hit=0; //zmienna odpowiada za obrazenia kuli i miganie 
maxHp = 100;
zegarAtaku = 0;
odejmij = 0; //zmienna potrzebna do przesuwanie skrzynki w end step 
atakBierzacy = 0;
global.zegarObrazen = 0;
kierunekPlywania = 0;
wysKierunek = 0;
silaSkoku = 0;
czasSkoku = 0;
drabina = false;
rs_timer = 0; //licznik czasowy w grze
tlen=10;//ilosc tlenu

//Moce specjalne
pwrupSpd = 0;
pwrupStr = 0;
pwrupJmp = 0;

//Pozycja odrodzenia Anatola i wywolanie skryptu widoku centralnego na graczu
spawnX = x;
spawnY = y;
centerViewOnMe();

//zachowanie pozycji gracza przy checkpointach
if (global.checkpointR == room)
{
    x = global.checkpointx;
    y = global.checkpointy;
}
start_x = x;
start_y = y;
//funkcja dodaje HUD gracza na planszach bossowych
if instance_exists(obj_game_controller)
obj_game_controller.visible=1
else instance_create(0,0,obj_game_controller);


//zamrazanie bohatera
zamroz = false;
zamroz_x = x;
zamroz_y = y;



playerSlot = 1; //ustalamy slot dla gracza numer 1
kierunekPlywaniaGamepad = 0;


///poziomy trudnosci


//Ustaw domyślne wartości życia i szans, gdyby nie wyszukało jaki jest poziom trudności
//global.hp = 100;
//global.life = 7;



/// Wyszukaj poziom trudności i ustaw odpowiednio życie i szanse 

//easy difficult
if global.difficulty  = "easy"
{
   global.hp = 100;
   global.life = 7;
}

//medium difficult
if global.difficulty  = "medium"
{
   global.hp = 100;
   global.life = 5;
}

//hard difficult
if global.difficulty  = "hard"
{

    global.hp = 80;
    global.life = 3;
    

}

    
    
    
    
    


  



 

Odnośnik do komentarza
Udostępnij na innych stronach

Ginie, bo pewnie hp ma cały czas na 0. Ale w sumie nie wiem jaki argument przypada za tym, że wyświetla się ekran śmierci, także zobacz czy ten argument czasem nie jest zapętlony w jakiś sposób.

 

Coraz bardziej chce zagrać w ten Twój twór. Przez weekend mnie nie ma w domu, a na telefonie ciężko jest rozczytać kod, a poza tym jest jeszcze liga. Także na razie Ci nie pomogę.

Odnośnik do komentarza
Udostępnij na innych stronach

Dziwna sytuacja.

 

Przypadek1.

Jak wyłączę w CREATE bohatera zmienną global.hp=100; to wtedy te cyrki się dzieją..

Jest tak,że obojętnie ile żyć mam czy 7,5 czy 3 to w chwili kiedy zginę od wroga od razu zeruje mi do 0 żyć..nie odejmuje żyć np mam 3 i potem 2 itd tylko od razu z 3 żyć do 0. Oczywiście działają obrażenia ze stepu jakie zadaje mi wróg w momencie kontaktu z nim.

lub odejmuje wszystkie życia i przeniesie mnie na początek planszy bo tak mam to ustawione i za chwile bohater obraca się do góry nogami i cały czas ginie i spada a na pasku HUD pokazuje się x-1 x-2 x-3 i tak cały czas nie liczyłem ale do x-9 aż doszło i wyłączyłem grę;-)

 

Przypadek2.

Jeśli mam włączoną zmienną  global.hp=100 w CREATE bohatera (tak jak zawsze to było) to ze stepu wroga nie działają już te obrażenia tylko te co są przypisane w kolizji z wrogiem czyli par_obrazenia par_attack. Nie mogę wtedy też ustawić mniejszej ilości energii np na poziomie hard 80%.

Wtedy też wszystko działa poprawnie.

 

 

 

Widzę coś w END STEPIE obj_player i w STEPIE obj_game_controller

jest hp <=0 ale to raczej chyba nie w tym problem

Ja to myślę,że problem może być w tych obiektach kolizyjnych bohatera z wrogiem i wroga z bohaterem; par_obrazenia oraz par_attack i par_bronkulki bo tu deklarujemy zmienną global,hp i to samo robimy w stepie wroga tak myślę,że to jest ten problem.

o proszę ligę oglądasz;-) to ty zapalony kibic jesteś zapewne:-)

 

obj_player

collision z par_bronkulki

 

///Obrazenia zadawane z bombek
if other.owner == par_enemy { //jesli bomba uderzy we  wroga zadaje mu obrazenia
 with other {
  instance_destroy();
 }
 if global.zegarObrazen == 2 {
  global.hp -= other.sila+other.silaEksplozji;
  global.zegarObrazen = room_speed/2;
  
 }
}

 

 

obj_player

collision z par_obrazenia

 

///Obrazenia jakie okreslone obiekty dziedziczace z tego rodzica zadaja Bohaterowi

if global.zegarObrazen<0 
{
global.hp-=17
global.zegarObrazen=room_speed*2

}

 

obj_player

collision z par_attack

 

///Obrazenia

if other.owner == par_enemy && zegarObrazen == 0 {
 global.hp -= other.sila;
 zegarObrazen = room_speed/2;
 
}

 

 

 

obj_player

 

End Step

 

///Zycia i dopalacze dodatkowo zabieranie zyc za upadek z bardzo duzej wysokosci


//Bohater dostajac obrazenia to miga
//miganie dodane specjalnie dla kuli kiedy wartosc zmiennej globalnej hit jest rowna 1
//Bohater miga otrzymujac obrazenia okreslone w pulapce kula oraz innych elementach zadajacych obrazenia
global.zegarObrazen-=1
if global.zegarObrazen>0 || global.hit=1 image_alpha=0.7+lengthdir_x(0.3,current_time)
else image_alpha=1;





if (global.hp <= 0)
{
global.life--
 instance_destroy();
 instance_create(x,y,obj_player_ginie)
 with (instance_create(x,y,obj_entity_die)) {
  sprite_index = spr_player_die01;
  image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi
  image_xscale = other.image_xscale;
  respawnObject = obj_player;
  respawnX = spawnX;
  respawnY = spawnY;
  physics = true;
  respawn = true; 
  image_alpha=0
 }
 audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie
}

//Dopalacze
if pwrupSpd > 0 {
 //Efekty
 if pwrupSpd mod 2 == 0 {
  if image_xscale > 0 {
   part_type_orientation(pArrow,0,0,0,0,0);
   part_type_direction(pArrow,0,0,0,0);
  } else {
   part_type_orientation(pArrow,180,180,0,0,0);
   part_type_direction(pArrow,180,180,0,0);
  }
  part_type_colour1(pArrow,c_lime);
  part_particles_create(partSystem,x-image_xscale*16,y-irandom(70),pArrow,1);
 }
 //Odliczanie do konca mocy specjalnej
 pwrupSpd -= 1;
}
if pwrupStr > 0 {
 //Efekty
 image_blend = merge_colour(image_blend,c_red,0.11);
 //Odliczanie
 pwrupStr -= 1;
}
if pwrupJmp > 0 {
 //Efekty
 if pwrupJmp mod 2 == 0 {
  part_type_orientation(pArrow,90,90,0,0,0);
  part_type_direction(pArrow,90,90,0,0);
  part_type_colour1(pArrow,c_yellow);
  part_particles_create(partSystem,x-16+irandom(32),y,pArrow,1);
 }
 //Odliczanie
 pwrupJmp -= 1;
}


Mam jeszcze osobny obiekt na planszy utworzony

 

obj_game_controller

 

STEP

 

///kontroler odpowiedzialny za giniecie bohatera
if (global.life=0)
{
game_end();
var s=highscores[|ds_list_size(highscores)-1];
//Czy punkty kwalifikuja sie na top 10
if(ds_list_size(highscores)<10 || s[?"score"]<=global.pScore) {
    room_goto( rm_save_score );
} else {
    room_goto( rm_game_over );
}
}

///monety zebranie 100sztuk doda 1 zycie bohaterowi,oraz zerowanie monet
if (global.coins=100)
{
global.coins=0;
global.life+=1;
}
//
if (global.coins>100)
{
global.coins=0;
global.life+=1;
audio_play_sound(dzwiek_anatol_zbiera_przedmiot, 1, false);   //odtwarzamy dzwiek po zdobyciu zycia
}





 

 

Obj_enemy

 

CREATE

 

///Ustawienia
event_inherited();

pointvalue=choose(10,20,30,40,50,60,70,80,90,100);//dodaje nam losowa ilosc pkt
dead=false;
killed=false
alarm[8] = -1;
movement_speed = 4;
hp = 10;
maxHp = 10;
global.zegarObrazenWroga = 0;
at=1
st=1
spd=4

//pozycje powrotu wroga po restarcie mapy
start_x = x; 
start_y = y;


widzi = 0;

///poziomy trudnosci


//easy difficult
if global.difficulty  = "easy"
{
   hp = 10;
}

//medium difficult
if global.difficulty  = "medium"
{
   hp = 15;
}

//hard difficult
if global.difficulty  = "hard"
{

    hp = 20;
  
    
}

obj_enemy

 

STEP

 

 ///Poruszanie sie
///AI wroga

if place_free(x,y+1)
{gravity = 0.5}
else
{gravity = 0}

if at=1
{
at=2
speed=4
}

if at=2
{
if hspeed<0
{
image_xscale = -1;
if !place_meeting(x-30,y+10,par_solid )
speed*=-1
else if place_meeting(x-1,y,par_solid )
speed*=-1
st=1
}

else if hspeed>0
{
image_xscale = 1;
if !place_meeting(x+30,y+10,par_solid )
speed*=-1
else if place_meeting(x+1,y,par_solid )
speed*=-1
st=2
}
}

//ginie wrog
if hp<0
{
instance_destroy()
}
killed=false

//animacja 
image_speed=0.3


/*
if hspd == 0 {
 image_xscale *= -1;
 unstick(8);
}
*/

//Gdy wrog zostaje atakowany mruga
if global.zegarObrazenWroga > 0 {
 visible = !visible;
 global.zegarObrazenWroga -= 1;
} else {
 visible = true;
}

if hp <= 0  {
 
 instance_destroy();
 
}


// poziom trudnosci 

//obrazenia jakie zadaje nam wrog na danym poziomie
if(place_meeting(x, y, obj_player) and alarm[8] == -1)
{
if(global.difficulty == "easy") && obj_player then global.hp -= 10;//6 uderzen wroga    
if(global.difficulty == "medium") && obj_player then global.hp -= 40;//4 uderzenia wroga
if(global.difficulty == "hard") && obj_player then global.hp -= 30;//3 uderzenia wroga

alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
}


obj_enemy

collision z par_attack

 

///Obrazenia od ataku wrecz


if other.owner == par_player && global.zegarObrazenWroga == 2 {
 hp -= other.sila;
 killed=true
 global.zegarObrazenWroga = room_speed/2;
}

obj_enemy

collision z par_bronkulki

 

///Obrazenia od pociskow 
if other.owner == par_player {
 with other {
  instance_destroy();
 }
 if global.zegarObrazenWroga == 0 {
  hp -= other.sila+other.silaEksplozji;
  killed=true
  global.zegarObrazenWroga = room_speed/2;
  instance_create(x+0,y+0,obj_oberwalefekt);
  
 }
}

 

Odnośnik do komentarza
Udostępnij na innych stronach

*Obj_enemy* - Step

//obrazenia jakie zadaje nam wrog na danym poziomie
if(place_meeting(x, y, obj_player) and alarm[8] == -1)
{
if(global.difficulty == "easy") && obj_player then global.hp -= 10;//6 uderzen wroga    
if(global.difficulty == "medium") && obj_player then global.hp -= 40;//4 uderzenia wroga
if(global.difficulty == "hard") && obj_player then global.hp -= 30;//3 uderzenia wroga

alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
}

odp.
Albo czegoś nie wiem, albo ten kod po prostu nie ma sensu. Przetłumacz go sobie powoli - jeśli poziom trudności na easy/medium/hard oraz obiekt gracz (ale co obiekt gracz?) to
global.hp odejmij 10/40/30.
Zapewne, choć nie jestem jasnowidzem, chodzi Ci o kolizjie, czyli musisz dać:
if(global.difficulty == "easy") && place_meeting(x,y,obj_player) then global.hp -= 10;//6 uderzen wroga 

 

*obj_player* - end step (w ogóle nie wiem po co używasz end step, ja go nigdy nie używałem xD)

if (global.hp <= 0)
{
global.life--
 instance_destroy(); // <--------------------------------------- Teoretycznie, dalszy kod od tej linijki się nie kompiluje, iż aż ponieważ obiekt jest niszczony;
 instance_create(x,y,obj_player_ginie)
 with (instance_create(x,y,obj_entity_die)) 
 {
  sprite_index = spr_player_die01;
  image_speed=(image_number/room_speed)/ 2//Czas zanim bohater sie odrodzi
  image_xscale = other.image_xscale;
  respawnObject = obj_player;
  respawnX = spawnX;
  respawnY = spawnY;
  physics = true;
  respawn = true; 
  image_alpha=0
 }
 audio_play_sound(dzwiek_anatol_ginie, 1, false); //odtwarzamy dzwiek gdy bohater ginie
}

odp.
dałem Ci komentarz w kodzie ale z drugiej strony, mówisz, że bohater obraca się nogami i ginie, to tak, jakby jednak instance_create(x,y,obj_player_ginie) się wykonał.
Niemniej przenieś instance_destroy();na sam koniec if'a

PS: dajesz tyle kodu do przetworzenia, że równie dobrze, możesz zapodać projekt :P Musisz nauczyć się minimalizować problem.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Teraz sztuczka:

enum difficulty {
easy = 1,
medium = 2,
hard = 3
};

/// gdzies tam indziej w kodzie

global.hp -= 10 * global.difficulty; //10,20,30

alternatywnie

enum difficulty {
easy,
medium,
hard 
};

/// gdzies tam indziej w kodzie

global.hp -= 10 + (15 * global.difficulty); // 10, 25, 40

dlatego poziom trudności jako string jest bez sensu

Odnośnik do komentarza
Udostępnij na innych stronach

Faktycznie sensu nie miał ten kod w stepie...

cały czas jest po wyłączeniu zmienne global,hp w bohaterze jak wróg mnie zabije..przeniesie mnie na początek planszy i bohater obraca się do góry nogami i cały czas spada i pokazuje się taka informacja x-1 x-3 x-5 x-7 x-9 x-11 itd...

Dziwne,bo nie ma tego zjawiska jak włączę zmienną global,hp w create..no,ale wtedy nie mogę ustawić energii mniejszej dla gracza na innym poziomie trudności.

Odnośnik do komentarza
Udostępnij na innych stronach

Gnysku Piotrze  czyli  to mogę dodać do kolizji bohatera z wrogiem? czy lepiej w stepie wroga?

 

global.hp -= 10 * global.difficulty; //10,20,30

Zastanawia mnie co jest powodem tej sytuacji,że po zabraniu życia poprzez obrażenia od wroga bohater wariuje cały czas spada i pokazuje sie dla przykładu taka informacja

x-1 x-3 x-5 x-7 x-9 x-11

to akurat przykład na poziomie hard,gdzie mam ustawione 3 życia i 80% energii

 

 

w End stepie jeśli dam na końcu ifa

instance_destroy();

to wtedy od razu po utracie życia jest game over...bez względu na ilość posiadanych żyć.

Ja myślę,że problem jest w kolizji z wrogiem i tylko z wrogiem,bo jak całkowicie wyłączę w stepie ten kod i w Create bohatera włączę zmienna global.hp=100; to wszystko jest w porządku,ale tak jak mówię nie mogę wtedy ustawić energii mniejszej niż 100% na innym poziomie gry.

Odnośnik do komentarza
Udostępnij na innych stronach

Już minimalizuje kod;-)

 

jeśli w stepie wroga mam tak:

 

Obj_enemy

STEP

//obrazenia jakie zadaje nam wrog na danym poziomie
if(place_meeting(x, y, obj_player) and alarm[8] == -1)
{
if(global.difficulty == "easy") && place_meeting(x,y,obj_player) then global.hp -= 10;//6 uderzen wroga 
if(global.difficulty == "medium") && place_meeting(x,y,obj_player) then global.hp -= 50;//4 uderzen wroga 
if(global.difficulty == "hard") && place_meeting(x,y,obj_player) then global.hp -= 50;//3 uderzen wroga 

alarm[8] = 1*room_speed; //atakuj bohatera co sekunde
}

I w obj_enemy mam ustawioną kolizję z bohaterem i jest taki kod

 

obj_enemy - dodana kolizja z par_obrazenia

 

/// Obrazenia jakie wrog zadaje Bohaterowi


if global.zegarObrazen<0 
{
global.hp-=17
global.zegarObrazen=room_speed*2
}

No to myślę,że w tym tkwi problem..

Bo w stepie jest też zmienna globa.hp i teraz co ma się wykonywać?

Bo nie mogę zmiennej global.hp wyłączyć,zawsze jest i była;-)

natomiast jak w stepie wroga wyłączę wyżej kod to jest wszystko tak jak było na początku gry bez błędów..Wróg zadaje obrażenia bohaterowi odejmując mu hp-=17

teraz jak to ogarnąć żeby na danym poziomie  zabierał odpowiednią ilość hp zależne od tego jak ustawiliśmy.

Ten STEP wroga coś tu jest nie tak...

 

Odnośnik do komentarza
Udostępnij na innych stronach

wywaliłem ze stepa wrogów tamten kod i dodałem zmieniony do kolizji bohatera z wrogami i teraz tak to wygląda

 

obj_player kolizja z par_obrazenia

 

if(global.difficulty == "easy")
if global.zegarObrazen<0 
{
global.hp-=17
global.zegarObrazen=room_speed*2
}
if(global.difficulty == "medium")
if global.zegarObrazen<0 
{
global.hp-=25
global.zegarObrazen=room_speed*2
}

if(global.difficulty == "hard")
if global.zegarObrazen<0 
{
global.hp-=34
global.zegarObrazen=room_speed*2
}

Obrażenia zadaje wróg w grze tyle ile jest ustawiona na danym poziomie,

nie wiem jeszcze czemu nie mogę na innym poziomie np hard ustawić global,hp=80 kurcze..tego nie wiem...

I akcja ze zmienną odpowiadającą za szybkość wroga na danym poziomie też się zawiesiłem:/

 

te enum muszę to przećwiczyć wygląda o wiele lepiej niż ja się męczę,ale Gnysku ty jesteś Gmclanowym Mentorem;-)

Gdzie ja do Ciebie uuuuuuuuu bardzo daleko;-)

A może wiecie co się dzieje z Damianem von Threef kurcze pisałem smsa do niego,ale cisza.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Master? Patrz na to. 12 linijek kodu zmniejszone do 4.

//zakładając, ze global.difficulty ma wartosci 0,1,2
var _hp_loose = [17, 25, 34];

if (global.zegarObrazen < 0) {
    global.hp -= _hp_loose[global.difficulty];
    global.zegarObrazen = room_speed*2;
}

no i jak enum nie znasz, to mozesz:

#macro d_easy 0
#macro d_medium 1
#macro d_hard 2

// potem
global.difficulty = d_easy;

// mozna tez bez d_, ale wtedy zablokujesz opcje nazywania tak zmiennych :P

 

Odnośnik do komentarza
Udostępnij na innych stronach

Master patrzy;-) Gnysku Piotrze

 

Właśnie to jest to,że Ty jesteś Mentorem Gnysku;-) zminimalizowałeś kod ;-)

dzięki ;-) będę musiał się tego nauczyć;-) bo mój kod jest za bardzo rozległy.

dodałem też w końcu zmienna odpowiedzialną za ruch wroga.

Wszystko gra jak trzeba;-)

 

Dziękuje panowie..naprawdę dużo Mi pomogliście...nawet takiemu człowiekowi jak Mi;-)

 

 

 

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