Dzień dobry wszystkim,
Od pewnego czasu borykam się z kilkoma problemami.
Mam na myśli drabinę.
Korzystałem z różnych samouczków w sieci,ale mimo to nie mogę rozwiązać tych problemów.
A teraz jaśniej.
Problem 1
Drabina na pozór działa dobrze..Mogę po niej wchodzić i schodzić.
Żeby z niej nie spaść użyłem trwałego obiektu który nanoszę na górną krawędź drabiny następnie ten obiekt trwały sparowałem z drabiną i problem powierzchownie rozwiązany.
czemu piszę że powierzchownie?
Bo jest mały problem...kiedy nacisnę krótko przycisk dół na klawiaturze to mój bohater spada z drabiny na najbliższe podłoże solid ; natomiast kiedy przytrzymam dłużej klawisz dół to schodzi normalnie z drabiny.
Nie mam pojęcia jak to naprawić żeby mógł normalnie schodzić bez względu czy nacisnę krótko klawisz dół czy też długo.
Problem 2
Nie wiem,czy tu akurat wina jest źle ustawionego sprita bohatera,ale kiedy wejdę już na szczyt drabiny to mimo że już jestem na górze,to jeszcze przez chwilę mój sprite wspina się.
Komicznie to wygląda...
Próbowałem w ustawieniach spritach zmienić pozycję x i y sprite...ale to nie pomaga..
Problem 3
Mój bohater będąc na drabinie ma możliwość ataku w postaci strzału z pocisku.
używam tu dodatkowo sprite ataku na drabinie który w chwili wystrzelenia pocisku pokazuje się.
I tu jest mały kłopot...Kiedy wykonam strzał bohaterem na drabinie to za nim pocisk się nie rozbije o cokolwiek to kiedy poruszam lewo prawo bohaterem to zamiast zmienić się sprite bohatera na wchodzącego po drabinie,to pokazuje się przez chwilę jeszcze sprite ataku na drabinie oczywiście źle to wygląda,bo on suwa się góra dół...
Tu poniżej kod mojej drabiny.
Pomijam większość,żeby nie wklepywać bezsensownie wszystkiego..
obj_bohater
Step
//Ruch bohaterem
if drabina == false
{
if key_check_pressed(key.jump) && wPowietrzu == false
{
vspd = -10-sign
silaSkoku = 4;
if key_check(key.down) && place_meeting(x,y+1,par_objekt_trwaly)//obiekt dziedziczacy z drabina aby bohater nie spadl z drabiny
{
y += 4;
vspd = 0;
silaSkoku = 0;
czasSkoku = 0;
}
}
//Drabina
if place_meeting(x,y,par_drabina) && place_meeting(x,y-32,par_drabina) && place_meeting(x,y+5,par_drabina) && czas <= 0 && (key_check(key.up) || key_check(key.down))
{
drabina = true;
vspd = 0;
hspd = 0;
}
}
//Ruch po drabinie
if drabina == true
{
var __hsign = key_check(key.right)-key_check(key.left);
var __vsign = key_check(key.down)-key_check(key.up);
hspd = min(max(hspd+__hsign,-2),2);
vspd = min(max(vspd+__vsign*2,-4),4);
if __vsign == -1 && !place_meeting(x,y-32,par_drabina)
{
drabina = false;
vspd = -10;
}
if __hsign != 0
{
image_xscale = __hsign;
}
if !place_meeting(x,y,par_drabina) || !place_meeting(x,y+32,par_drabina)
{
drabina = false;
}
}
// animacja bohatera wchodzacego na drabinie i odpoczywajacego
if drabina == true {
if x == xprevious && y == yprevious {
if sprite_index != spr_bohater_odpoczywanadrabinie {
sprite_index = spr_bohater_odpoczywanadrabinie;
}
} else {
if sprite_index != spr_bohater_wchodzipodrabinie {
sprite_index = spr_bohater_wchodzipodrabinie;
}
}
}
////Bohater atakuje z drabiny
if keyboard_check_pressed(ord('X')) && drabina==true && czas == false && place_meeting(x,y,par_drabina) && instance_number(objPocisk) < 3
{
czas = 30;
atak = 1;
with instance_create(x,y,par_ataku) {
sprite_index = spr_bohater_strzela_na_drabinie;
image_xscale = other.image_xscale;
{
var box, ID;
if image_xscale == -1
box = bbox_left;
else
box = bbox_right;
ID = instance_create(box+image_xscale*-10, y-17, objPocisk);
ID.hspeed = image_xscale * 15;
}
}
}