ProExCurator Opublikowano 30 Stycznia 2017 Udostępnij Opublikowano 30 Stycznia 2017 Problem jest taki że z jakiegoś powodu nie mogę zaatakować dwukrotnie gdy postać stoi w jednym miejscu, dopiero poruszenie się sprawia że mogę zaatakować po raz drugi. Jednocześnie gdy użyje przycisku "Shift", czyli w tym przypadku "biegania", to w ogóle nie mogę atakować. Próbuję znaleźć przyczynę, ale jej nie widzę. Pomożecie? Obj_Player - Step Event: GML if (attack_key) { if (global.MeleeAttacking == false) { image_index = 0; global.MeleeAttacking = true; } } Obj_Player - End Animation: GML global.MeleeAttacking = false; Script - scr_move_state: GML //Movement phy_rotation = -point_direction(x,y,mouse_x,mouse_y) global.rotation = phy_rotation var xaxis = (right_key - left_key); var yaxis = (down_key - up_key); // Get direction var dir = point_direction(0, 0, xaxis, yaxis); // Get the length if(xaxis == 0 and yaxis = 0) { len = 0; run_len = 0; } else { len = spd; run_len = run_spd; } // Get the hspd and vspd hspd = lengthdir_x(len, dir); vspd = lengthdir_y(len, dir); run_hspd = lengthdir_x(run_len, dir); run_vspd = lengthdir_y(run_len, dir); if(len == 0) { if(global.MeleeAttacking == false) { sprite_index = spr_player_stand } global.Direction = "Stand" } // Move if(keyboard_check(vk_lshift)) { phy_position_x += run_hspd; phy_position_y += run_vspd; } else { phy_position_x += hspd; phy_position_y += vspd; } // Vertical sprites if (vspd > 0) { if(global.MeleeAttacking == false) { if(!keyboard_check(vk_lshift)) { image_speed = .2; sprite_index = spr_player; } else { image_speed = .3; sprite_index = spr_player; } } global.Direction = "Up"; } else if (vspd < 0) { if(global.MeleeAttacking == false) { if(!keyboard_check(vk_lshift)) { image_speed = .2; sprite_index = spr_player; } else { image_speed = .3; sprite_index = spr_player; } } global.Direction = "Down"; } // Horizontal sprites if (hspd > 0) { if(global.MeleeAttacking == false) { if(!keyboard_check(vk_lshift)) { image_speed = .2; sprite_index = spr_player; } else { image_speed = .3; sprite_index = spr_player; } } global.Direction = "Left"; } else if (hspd < 0) { if(global.MeleeAttacking == false) { if(!keyboard_check(vk_lshift)) { image_speed = .2; sprite_index = spr_player; } else { image_speed = .3; sprite_index = spr_player; } } global.Direction = "Right"; } // Melee Attack if (global.Select_Weapon = "Melee") { if(global.MeleeAttacking == true) { sprite_index = spr_player_melee if (floor(image_index==5)) { instance_create(x, y, obj_attack_box) audio_play_sound(snd_melee_swing, 0, false); } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Danielus Opublikowano 30 Stycznia 2017 Udostępnij Opublikowano 30 Stycznia 2017 Może jestem ślepy ale nigdzie nie widzę czegoś takiego jak "attack_key". I co to jest toto: GML if (floor(image_index==5)) Wyjaśnij mi jak to działa i dlaczego i jaki miałeś zamiar( co chciałeś osiągnąć ) pisząc to w ten sposób Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 30 Stycznia 2017 Autor Udostępnij Opublikowano 30 Stycznia 2017 Może jestem ślepy ale nigdzie nie widzę czegoś takiego jak "attack_key". I co to jest toto: GML if (floor(image_index==5)) Wyjaśnij mi jak to działa i dlaczego i jaki miałeś zamiar( co chciałeś osiągnąć ) pisząc to w ten sposób W przetłumaczeniu - "Jeżeli - 5 klatka animacji". Akurat ta funkcja raczej działa prawidłowo i napisana jest w ten sposób ponieważ taki mi doradzono wcześniej na zagranicznym forum, gdy miałem problem z tego typu funkcją. Wcześniej używałem zwykłego "image_index==5" i nie działało jak trzeba. Jeżeli wiesz jak można lepiej napisać tego typu warunek, to chętnie poznam, bo może jest lepszy sposób na uzyskanie tego rezultatu. attack_key jest w skrypcie scr_get_input, a pobierany jest w Create Evencie obj_player. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 30 Stycznia 2017 Udostępnij Opublikowano 30 Stycznia 2017 Dawno nie robilem nic w GM ale myślę że event Animation End jest pomijany w niektórych wypadkach, rysuje sobie zmienną na ekranie i sprawdź czy jest ustawiona na false(global.MeleeAttacking)%2 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 30 Stycznia 2017 Autor Udostępnij Opublikowano 30 Stycznia 2017 Dawno nie robilem nic w GM ale myślę że event Animation End jest pomijany w niektórych wypadkach, rysuje sobie zmienną na ekranie i sprawdź czy jest ustawiona na false(global.MeleeAttacking)%2 Hmmm, ciekawe... Ustawiłem GML global.MeleeAttacking = false; w zwykłym timerze GML Alarm[0] = room_speed*0.5 i teraz mogę atakować w tym samym miejscu i wszystko działa jak trzeba dopóki nie użyje shifta/biegania... czyli tutaj jeszcze tylko jest problem. EDIT: Okay, ustawiłem przy wywoływaniu funkcji stałą prędkość animacji image_speed = 0.2, bo z jakiegoś powodu pobierało prędkość z animacji chodzenia i gdy wciskałem shift zmieniało prędkość spr_attack_melee na 0.3 i przy tej prędkości floor(image_index==5) nie działa prawidłowo. Czyli jak widać faktycznie można by tutaj to usprawnić, ale nie wiem jak... PS: Warto się przenieść na Studio 2? Nie ma tam tego typu problemów jak tu z Animation End? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 30 Stycznia 2017 Udostępnij Opublikowano 30 Stycznia 2017 Chodziło mi raczej tylko o wypisanie jej na ekranie/sprawdzenie w debuge, jeśli chodzi o shift to musisz podać kod jak sprawdzasz przyciski Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ProExCurator Opublikowano 30 Stycznia 2017 Autor Udostępnij Opublikowano 30 Stycznia 2017 Chodziło mi raczej tylko o wypisanie jej na ekranie/sprawdzenie w debuge, jeśli chodzi o shift to musisz podać kod jak sprawdzasz przyciski Szczerze to, zacząłem przygodę z GM bardzo nie dawno i właśnie jedno z czym się do tej pory nie zapoznałem to jak działa Debugger :D Wiem że to podstawa, więc muszę się tego nauczyć. Jest jakiś poradnik gdzieś, co do tego? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę