Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

Jak zrobić pętle for w skrypcie?

Pisząc coś takiego:

GML
///scr_itemBounce(times,spd);

times = argument0;

spd = argument1;

 

for(i=0; i<10; i++)

{

phy_rotation += 1;

}

 

Zmienna i w forze cały czas ma ustawioną wartość 0, prawda? Dlatego pętla cały czas jest wykonywana.

Próbowałem zmienną przypisać do argumentu ale w sumie to to samo (mam na myśli coś takiego:

GML
Step:

scr_itemBounce(0);

 

Skrypt:

i = argument0;

)

 

Wiem, że można by zmienną i przypisać w CREATE obiektu ale zależy mi, aby zmienna była właśnie tworzona tymczasowo w skrypcie.

Odnośnik do komentarza
Udostępnij na innych stronach

Właśnie jest na odwrót. W kodzie "nie ma" mouse check, ale jest mouse check global.

Funkcje mouse_check_button[_pressed,_released] są globalne i nie dotyczą kliknięcia na obiekt. Jeżeli chcesz przy kliknięciu na obiekt musisz to zrobić ręcznie.

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuję za odpowiedź, rzeczywiście racja leży po Twojej stronie :) Dziękuję za pomoc.

 

Od razu mam drugie pytanie, nie chciałbym oczywiście nadużyć cierpliwości, ale czy w GM mogę od tak otworzyć sobie plik np tekstowy, tak że uruchamia się z domyślnego programu? Np. mam w folderze z grą plik notatnik readme i chciałbym aby po kliknięciu np danego klawisza on się otwierał. Wiem , że jest coś takiego domyślnie dla F1 , wtedy otwiera się game info, ale czy mogę zrobić to ręcznie dla pliku, który sam stworzę?

Odnośnik do komentarza
Udostępnij na innych stronach

Mam drobnostkę, dawno programowałem w GMS i do tego kupiłem sobie GMS2 (Studio dawał mi popalić, bo ciągle miał jakieś problemy z winem 10 u mnie :/ ) i coś robię źle ale tego nie widzę...

 

Hmm, nie wiem, wszystko wygląda ok, ale chyba coś musiałem zje*ać :D

 

 

EDIT: Dobra ja durny jestem jak pień... Nie wiem na cholerę mi potrzebne było with (o_WeaponParent)... Ehh ja to zawsze :D

 

Błąd:

GML
//Pumpo

_______________________________________

################################################################################

############

FATAL ERROR in

action number 1

of Step Evento_WeaponChooser

for object o_Player:

 

Variable <unknown_object>.<unknown variable>(100023, -2147483648) not set before reading it.

at gml_Object_o_Player_Collision_5aae0650_fffc_495c_88b1_5aa3451b403a (line 7) - if other.weap > 5 {

################################################################################

############

 

 

Collision Event o_WeaponParent.

GML

/// @description Insert description here

// You can write your code in this editor

var oldweap;

 

with (o_WeaponParent){

 

if other.weap > 5 {

 

if primweap = 0{

 

primweap = other.weap;

primammo = other.ammo;

primmag = other.mag;

instance_destroy(other);

 

} else {

 

oldweap = instance_create_layer(x,y,"Instances",o_WeaponOld);

oldweap.weap = primweap;

oldweap.ammo = primammo;

oldweap.mag = 0;

 

}

 

}

 

}

 

 

/* //Wypisałem sobie na zaś trochę tego, już mam wypisane bronie jakie chciałem.

global.weaponid[16,0] = "Pumpo"; // name

global.weaponid[16,1] = 20; // dmg

global.weaponid[16,2] = 40; // AP

global.weaponid[16,3] = 10; // Ammo

global.weaponid[16,4] = 10; // Max Ammo

global.weaponid[16,5] = 0; // Mag

global.weaponid[16,6] = 5; // Max mag

global.weaponid[16,7] = 0; // empty mag

global.weaponid[16,8] = sou_Pumpo; // sound

global.weaponid[16,9] = room_speed*4; // reload time

global.weaponid[16,10] = room_speed*1; // shoting time

global.weaponid[16,11] = 0; // mag ammo

////////////////////////////////</span>

Odnośnik do komentarza
Udostępnij na innych stronach

Hej i ja również mam drobny problem. Mam ustawioną akcje przy evencie jednego kliknięcia prawym przyciskiem myszy. Czasami jednak akcja wykonuje się dopiero po dwukrotnym kliknięciu. Sprawdzałem na różnych myszkach , i to nie wina sprzętu. Zauważyłem, że za każdym razem gdy do tego dochodzi w CompileForm pojawia się taka wiadomość:

 

 

Pause event has been registered for this frame

Pause event has been unregistered

 

Dodam, że nie mam w żadnym innym obiekcie ustawionego kodu aktywującego pauze.

 

 

hmmm , dziwna sprawa.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak przypisać sprite_index do zmiennej??

 

 

Zwykłe

 

GML
sp=sprite_index
zupełnie nie działa

 

Zadanie jest takie że po danej czynności ludzik ma wrócić do sprite jaki miał tuż przed jej wykonaniem- tak jakby sprite_index=sprite_index_previous :P

 

sprite_get_name i object_get_sprite też nei działają tak jak powinny albo źle ich używam

Odnośnik do komentarza
Udostępnij na innych stronach

Jak przypisać sprite_index do zmiennej??

 

 

Zwykłe

 

GML
sp=sprite_index
zupełnie nie działa

 

Zadanie jest takie że po danej czynności ludzik ma wrócić do sprite jaki miał tuż przed jej wykonaniem- tak jakby sprite_index=sprite_index_previous :P

 

sprite_get_name i object_get_sprite też nei działają tak jak powinny albo źle ich używam

 

Dziwna sprawa, sp = sprite_index powinno działać, bo sprite_index to wartość REAL odnosząca się do indexu sprite'a. Na pewno nie aktualizujesz sp = sprite_index co step, powodujac ze sie nadpisuje?

Odnośnik do komentarza
Udostępnij na innych stronach

Mam problem z collision_line

 

GML
collision_line(x,y,o_gracz.x,o_gracz.y,obiekty,true,false)

 

 

chciałbym żeby collision_line wykrywał wszystkie obiekty a nie tylko ten wskazany . Dzięki :D

 

http://www.gmlscripts.com/script/collision_circle_list

To jest to czego szukasz.

Odnośnik do komentarza
Udostępnij na innych stronach

Mam problem z kodem zmiany broni. Po pierwszym kliknięciu "E" broń leżąca na ziemi zmienia x i y na x i y postaci, po drugim wciśnięciu "E" broń dopiero się zmienia... Jest to upierdliwe :/

 

Collision Code with o_WeaponParent:

GML
if keyboard_check_pressed(ord("E")){

if other.weap > 5{

if primweap = other.weap{

if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

global.weaponid[other.weap,5] += other.mag;

other.mag = 0;

} else {

var a = global.weaponid[other.weap,6] - other.mag;

global.weaponid[other.weap,5] += a;

other.mag -= a;

}

} else {

if primweap = 0{

primweap = other.weap;

primammo = other.ammo;

if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

global.weaponid[other.weap,5] += other.mag;

instance_destroy(other);

} else {

var a = global.weaponid[other.weap,6] - other.mag;

global.weaponid[other.weap,5] += a;

instance_destroy(other);

}

instance_destroy(other);

} else {

var oldammo, oldweap, oldweapinst;

oldammo = primammo;

oldweap = primweap;

primweap = other.weap;

primammo = other.ammo;

if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

global.weaponid[other.weap,5] += other.mag;

instance_destroy(other);

} else {

var a = global.weaponid[other.weap,6] - other.mag;

global.weaponid[other.weap,5] += a;

instance_destroy(other);

}

oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld);

oldweapinst.ammo = oldammo;

oldweapinst.weap = oldweap;

oldweapinst.mag = 0;

instance_destroy(other);

}

}

} else {

if secweap = other.weap{

if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

global.weaponid[other.weap,5] += other.mag;

other.mag = 0;

} else {

var a = global.weaponid[other.weap,6] - other.mag;

global.weaponid[other.weap,5] += a;

other.mag -= a;

}

} else {

if secweap = 0{

secweap = other.weap;

secammo = other.ammo;

if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

global.weaponid[other.weap,5] += other.mag;

instance_destroy(other);

} else {

var a = global.weaponid[other.weap,6] - other.mag;

global.weaponid[other.weap,5] += a;

instance_destroy(other);

}

instance_destroy(other);

} else {

var oldammo, oldweap, oldweapinst;

oldammo = secammo;

oldweap = secweap;

secweap = other.weap;

secammo = other.ammo;

if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

global.weaponid[other.weap,5] += other.mag;

instance_destroy(other);

} else {

var a = global.weaponid[other.weap,6] - other.mag;

global.weaponid[other.weap,5] += a;

instance_destroy(other);

}

oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld);

oldweapinst.ammo = oldammo;

oldweapinst.weap = oldweap;

oldweapinst.mag = 0;

instance_destroy(other);

}

}

}

}

 

//}

 

/*

global.weaponid[16,0] = "Pumpo"; // name

global.weaponid[16,1] = 20; // dmg

global.weaponid[16,2] = 40; // AP

global.weaponid[16,3] = 10; // Ammo

global.weaponid[16,4] = 10; // Max Ammo

global.weaponid[16,5] = 0; // Mag

global.weaponid[16,6] = 5; // Max mag

global.weaponid[16,7] = 0; // empty mag

global.weaponid[16,8] = sou_Pumpo; // sound

global.weaponid[16,9] = room_speed*4; // reload time

global.weaponid[16,10] = room_speed*1; // shoting time

global.weaponid[16,11] = 0; // mag ammo

///////////////////////////////*/

Odnośnik do komentarza
Udostępnij na innych stronach

Może zrób oddzielny temat do tego, bo to większy temat niż mała pierdoła i zanim dostaniesz odpowiedź pytanie może utonąć w morzu mniejszych pytań.

Może opowiesz coś więcej o tym kodzie? Która zmienna odpowiada za trzymaną w ręce broń? Kod wykonałeś Ty czy ktoś inny, jak ktoś inny gdzie możemy znaleźć źródło?

Edit: I jeszcze jedno pytanie. Czy E obsługje kilka rzeczy czy tylko podnoszenie broni?

Edit2: Okej czyli to jest bazowane 100% na instancjach, tylko nie widze czy bron w reku to zmienne czy tez instancja. Jeżeli ty pisaleś ten kod to na miłość boską używaj komentarzy do opisywania kodu!

Odnośnik do komentarza
Udostępnij na innych stronach

Na przyszłość będę pamiętał o komentarzach do kodu. Kod pisałem ja :), broń to zmienna, nie instancja, później będę rysował po prostu dany sprite, czy to przeładowania czy po prostu chodzenia z bronią.

GML
other.weap //jest to id broni jaką posiada objekt do losowania broni.

primweap //zmienna broni głównej

other.mag //zmienna ile jest magazynków przy broni.

global.weaponid[other.weap,5] //posiadana ilość magazynków,

global.weaponid[other.weap,6] //maxymalna ilość magazynków;

other.ammo //posiadana amunicja przez obiekt

other.weap > 5 //jeżeli nie jest to pistoletem, to przypisuje do slotu głównej broni

oldammo //aktualnie posiadana amunicja do danej broni

oldweap //id broni

oldweapinst //nowa instancja broni

primammo //amunicja do głównej broni</span>

 

W postaci mam jeszcze zmienną, którą broń posiadam

GML
usedweap; // jest = 0(pistolety) lub 1(karabiny); to jest czy używam primweap czy secweap
Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem tak jak piszesz ( dziękuję za odpowiedź) i jest postęp, mogę wpisać niektóre polskie znaki, ale niektóre takie jak np ć czy ę są wciąż poza zasięgiem GMa pomimo że dodałem je do okna Font Range.

 

Początkowo myślałem , że to wina tego że używam AutoHotKey i mam różne makra dopisane do kombinacji klawiszy zawierające C oraz E, ale zrestartowałem komputer i nie pomogło.

Odnośnik do komentarza
Udostępnij na innych stronach

macie może pomysł jak napisać ten sam kod ale w bardziej optymalny sposób?

 

GML

if place_meeting(x,y,obj_clif_right)

{

if image_xscale=1

{

clif_size=1

clif_id=instance_place(x,y,obj_clif_right);

}

else

{

clif_id=0

clif_size=0

}

 

}

else if place_meeting(x,y-16,obj_clif_right)

{

if image_xscale=1

{

clif_size=1

clif_id=instance_place(x,y-16,obj_clif_right)

}

else

{

clif_id=0

clif_size=0

}

 

}

else if place_meeting(x,y-32,obj_clif_right)

{

if image_xscale=1

{

clif_size=3

clif_id=instance_place(x,y-32,obj_clif_right)

}

else

{

clif_id=0

clif_size=0

}

 

}

else if place_meeting(x,y,obj_clif_left)

{

if image_xscale=-1

{

clif_size=1

clif_id=instance_place(x,y,obj_clif_left)

}

else

{

clif_id=0

clif_size=0

}

 

}

else if place_meeting(x,y-16,obj_clif_left)

{

if image_xscale=-1

{

clif_size=2

clif_id=instance_place(x,y-16,obj_clif_left)

}

else

{

clif_id=0

clif_size=0

}

 

}

else if place_meeting(x,y-32,obj_clif_left)

{

if image_xscale=-1

{

clif_id=instance_place(x,y-32,obj_clif_left)

clif_size=3

}

else

{

clif_id=0

clif_size=0

}

 

}

else

{

clif_id=0

clif_size=0

}

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