Skocz do zawartości

[Tutorial] [GM8] Gra w GameMaker - sztuczna inteligencja wrogów, pieniądze, strzelanie oraz okna dialogowe


Rekomendowane odpowiedzi

Witam w tym poście chciałbym zrobić poradnik, a w tym poradniku chciałbym wprowadzić nowych do gm'a.

W tym poradniku pokażę wam sztuczną inteligencję, pieniądze oraz wszystkie możliwości okien dialogowych.

A więc zaczynajmy!

 

Po pierwsze tworzymy obiekt Gracz i dajemy mu jakiś obrazek.

 

[Tworzymy 5 eventów w obiekcie Gracz

Key Press Left

Key Press Right

Key Press Up

Key Press Down

Key Relase Any Key

 

W Left wkładamy pierwszy klocek z zakładki Move w dziale Move czyli Move Fixed.

Skoro to przycisk strzałki w lewo to w tym co nam się pokaże po przesunięcia klocka Move Fixed do eventu zaznaczamy strzałkę w lewo i pod tym ustalamy prędkość, ja ustalę 3.

Z resztą eventów Key Press robimy to samo, w Right poruszanie się w prawo, w up w górę, a w down w dół.

 

W event Key Relase Any Key wkładamy ten sam klocek, ale klikamy w nim klocek po środku strzałek, a prędkość ustalamy na 0.

 

W ten sposób uzyskujemy podstawowe chodzenie]

 

[Teraz tworzymy obiekt Kamien a w nim trochę pod nazwą klikamy Solid W obiekcie Gracz tworzymy event Colision -> Kamien. W tym evencie wstawiamy klocek z zakładki Move, z działy Jump czyli Bounce

W ten sposób uzyskujemy odbijanie się od skały]

 

[Teraz stworzymy mini-sklepik. U bohatera tworzymy event kliknięcia jakiegoś przycisku, a w nim z zakładki Control, z działu Code wybieramy Execute Code i do niego wklejamy to:

GML
wybor = 0;

menu = show_message_ext("Co chcesz kupić?","Broń?","Teren?","Nic?");

 

if menu == 1 {

wybor=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie");

if (wybor == 1) and (score>20) and (global.bron == 0) {

global.bron = 1

wybor = 0

score -= 20;

}

}

else if menu == 2 {

wybor = show_message_ext("To będzie kosztowało 10 kryształów. Czy potwierdzasz zakup?","Tak","","Nie");

if (wybor == 1) and (score > 10) and (global.teren < 3) {

global.teren += 1;

wybor = 0;

score -= 10;

}

}

 

W evencie create bohatera do Execute Code wklejamy to:

GML
global.odstep=get_integer("Jaki ma być odstęp między strzałami wroga?","100")

global.bron=0

wybor=0

global.teren=0

global.strzal

 

Teraz tłumaczenie!

 

get_integer to pytanie o numerek

global.odstep,wybor, global.teren i global.bron to zmienne z początkową wartością 0

Gdy klikniemy przycisk sklepiku pojawi się pytanie z trzema przyciskami.

 

Co chcesz kupić?

[broń?] [Teren?] [Nic]

 

Wywołuje to kod show_message_ext("","","","")

Przed nim mamy menu= z czego wychodzi menu=show_message...

To sprawia, że zmienna menu dostanie wartość po kliknięciu przycisku.

[broń?] - 1

[Teren?] - 2

[Nic?] - 3

 

Po tym jest napisane if menu=1 {wybor=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie")

If oznacza jeżeli, więc kod oznacza jeżeli menu=1....

if to komenda menu=1 to tekst logiczny a po tekście logicznym stawiamy akcję w tych nawiasach {}

W nawiasach mamy ten sam kod, który nas pyta o to co chcemy kupić, ale tutaj mówi do nas To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup? i mamy dwa przyciski:

 

Czy potwierdzasz zakup?

[Tak] [Nie]

 

W kolejnym if'ie game maker sprawdza czy mamy powyżej 20 monet oraz czy nie zakupiliśmy już tego produktu. Jeżeli wszystko się zgadza, kod odbiera nam 20 monet, a zmianną bron zamienia na 1.

Dalej mamy tak samo tylko tym razem game maker sprawdza czy mamy ponad 10 krzyształów i czy nie mamy maksymalnego poziomu terenu. ]

 

[ Skoro mamy sklepik, to czas na walutę.

Tworzymy obiekt i dajemy mu obrazek.

Tworzymy także drugi obiekt, ale jego teksturka powinna być nie widoczna, lecz jednak istnieć. U mnie to jest czarny piksel.

W obiekcie punktu tworzymy event Colision --> Gracz, a do niego wsadzamy klocek z zakładki main1 z działu Objects na pierwszej pozycji z drugiego rzędu czyli Change Instance ---> Zamiennik_Kryształu (czyli ten piksel) oraz Execute Code w którym wpisujemy po prostu

GML
score+=1;

W zamienniku kryształu dajemy natomiast Colision ---> Wrog, a w tym Change Instance --> Kryształ

W ten sposób tworzymy kryształ, który po wejściu na niego znika i dodaje punkt, a gdy najedzie na niego wróg znów się pojawia ]

 

[Czas na wrogów!

Pierwszy krok sztucznej inteligencji, czyli chodzenie za graczem omijając przeszkody.

GML
mp_potential_step_object (Gracz.x, Gracz.y, 1, Kamien)

Ten kod ^^^ wstawiamy do step.

Słowo potential niektórym kojarzy się z inteligenncją. Kod mp_potential_step_object to podążanie do danego punktu omijając przeszkody.

 

Pierwszy argument (Gracz.x) - koordynat x, do której ma podążać obiekt.

Drugi argument (Gracz.y) - koordyt y, do której ma podążać obiekt.

Trzeci argument (1) - prędkość z jaką ma podążać obiekt.

Czwarty argument (Kamien) - obiekt, który ma omijać podczas podążania do podanej koordynacji.

 

Teraz drugi stopień sztucznej inteligencji.

Tworzymy event Begin Step, a w nim w Execute Code:

GML
if global.strzal == 1&&global.bron == 1&&distance_to_object(Gracz)<=100;

{

alarm[4]=1;

}

 

To spowoduje nam nadanie alarmowi 4 wartości 1, kiedy broń będzie aktywna, a gracz będzie przybliżony do wroga o minimum 99.

Tworzymy event alarm 4 a w nim kod:

GML
global.strzal=2 alarm[4]=global.odstep;

oraz alarm 5:

GML
instance_create(Wrog.x,Wrog.y,Strzal_Zly) global.strzal=1

 

Teraz tworzymy obiekt Strzal_Zly, a w nim dajemy to:

Event Create > Zakładka main2 > Dział Timing > 1 czyli Set Alarm

 

Pierwsze okienko - 100

Drugie okienko - Alarm 3

 

Alarm 3 > Zakładka main1 > Dział Objects > 2 w 2 rzędzie czyli Destroy the instance

 

To wszystko spowoduje usunięcie się z planszy strzału po minięciu 100 kroczków.

 

Step > Execute Code

GML
mp_potential_step_object (Gracz.x, Gracz.y, 2, object2)

 

Zderzenie z obiektem t1,t1,t1 > odbicie * Te obiekty w następnych nawiasach

 

W ten sposób uzykujemy sztuczną inteligencję wrogów! ]

 

 

[Tworzymy jeszcze trzy obiekty; t1,t2 i t3, każdy z nich ma mieć zaznaczone solid, a ich tekstura, najlepiej żeby była taka sama jak kamień.

 

W t1, w evencie Step, w Execute Code dajemy:

GML
if global.teren == 1 {instance_destroy();}

To spowoduje czekanie aż zmienna global.teren będzie miała wartość 1 i wtedy usunięcie się z planszy.

W t2 i t3 robimy to samo, lecz tym razem global.teren == 2, a w t3 == 3.

 

U gracza i wroga robimy eventy Zderzenia z każdym z tych bloczków, a w nich odbicie jak w drugich nawiasach.]

 

[

Tworzymy obiekt pocisk, a w nim:

 

Create>Move>Move>Pierwsze czyli Move Fixed

Zaznaczamy wszystkie strzałki i ustalamy prędkość.

 

Colision ---> Kamien>main1>Objects>Destroy the instance

^^^

Robimy tak samo jak tutaj ^^^ przy zderzeniu z t1,t2,t3

 

Obiekt Gracz>Przycisk do strzału>Control>Code>Embed Code

GML
if global.bron == 1 {instance_create(Gracz.x,Gracz.y,pocisk)}

 

I mamy strzelanie i tym samym całą grę! Jeszcze tylko u gracza przy zderzeniu ze złym pociskiem w kodzie score-=10, a u wroga przy zderzeniu z pociskiem score+=10

]

 

Przykład: (Oczywiście całkowity zakaz udostępniania projektu[chyba, że dosyć go przerobiliście, ale i tak dajecie mnie i ten post w creditsach]bez mojej wiedzy, zgody i w waszym imieniu)

Klikunio :D

P.S. Wprowadziłem sobie jeszcze prostą konsolkę do kodów pod eventem Key Relase Ctrl u Gracza, można sobie zobaczyć :)

Odnośnik do komentarza
Udostępnij na innych stronach

Do dupy. Nic się nie trzyma kupy. Przyciągasz napisem "sztuczna inteligencja wrogów" a jedyne co robisz to sterowanie w 4 kierunkach i to na klockach nie tłumacząc nic. Nawet czemu robisz to sterowanie. Potem robisz odbijanie od obiektu... Przypominam przed chwilą że zrobiłeś poruszanie top-down w 4 kierunkach. Odbijanie od obiektów przy takim sterowaniu jest głupie, nawet jak dla początkujących.

 

Użycie show_message_ext jest idiotyczne. Nie używa się tego do takich rzeczy. Jest to bardzo proste, ale jeżeli masz zamiar 'robić sklep' w swojej grze, to może warto nauczyć się robić to w jakikolwiek dobry sposób.

 

Nazwałeś to "Początki z game maker", a to nie są żadne początki. Nic nie wytłumaczyłeś, a od razu wyjaśniasz kod.

Odnośnik do komentarza
Udostępnij na innych stronach

[...]

GML
pot=0 menu=show_message_ext("Co chcesz kupić?","Broń?","Teren?","Nic?")

if menu=1 {pot=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie")

if pot=1&&score>20&&bron=0{bron=1 pot=0 score-=20}}

if menu=2 {pot=show_message_ext("To będzie kosztowało 10 kryształów. Czy potwierdzasz zakup?","Tak","","Nie")

if pot=1&&score>10&&global.teren<3{global.teren+=1 pot=0 score-=10}}

[...]

 

Nie ucz paskudnych nawyków.

1. W warunkach pętli if, używamy == zamiast =.

2. Po linijkach stawiamy średniki.

3. Formatujemy kod.

4. Nie używamy krótkich nazw zmiennych, z których nie można się nic domyśleć.

5. Należy używać else if bądź pętli switch (jeśli takowa istnieje w gml, nie pamiętam).

Poprawiłem ten kod trochę:

 

GML
wybor = 0;

menu = show_message_ext("Co chcesz kupić?","Broń?","Teren?","Nic?");

 

if menu == 1 {

wybor=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie");

if (wybor == 1) and (score > 20) and (bron == 0) {

bron = 1

wybor = 0

score -= 20;

}

}

else if menu == 2 {

wybor = show_message_ext("To będzie kosztowało 10 kryształów. Czy potwierdzasz zakup?","Tak","","Nie");

if (wybor == 1) and (score > 10) and (global.teren < 3) {

global.teren += 1;

wybor = 0;

score -= 10;

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Początkujący nic z tego nie zrozumie. Chaotycznie i przypadkowo skaczesz z tematu na temat i nic nie wyjaśniasz.

 

Wyobraź sobie, że pierwszy raz w życiu uruchomiłem GM, a ty od razu z grubej rury:

Po pierwsze tworzymy obiekt Gracz i dajemy mu jakiś obrazek.

Tworzymy 5 eventów w obiekcie Gracz

Że jak? Że co? Co to "obiekt"? Jak go zrobić, jak "dać mu obrazek"? Co to są "eventy" i jak je stworzyć?

 

Poczytaj sobie lepsze tutoriale dla początkujących i zobacz, jak są zrobione.

Odnośnik do komentarza
Udostępnij na innych stronach

Do dupy. Nic się nie trzyma kupy. Przyciągasz napisem "sztuczna inteligencja wrogów" a jedyne co robisz to sterowanie w 4 kierunkach i to na klockach nie tłumacząc nic. Nawet czemu robisz to sterowanie. Potem robisz odbijanie od obiektu... Przypominam przed chwilą że zrobiłeś poruszanie top-down w 4 kierunkach. Odbijanie od obiektów przy takim sterowaniu jest głupie, nawet jak dla początkujących.

 

Użycie show_message_ext jest idiotyczne. Nie używa się tego do takich rzeczy. Jest to bardzo proste, ale jeżeli masz zamiar 'robić sklep' w swojej grze, to może warto nauczyć się robić to w jakikolwiek dobry sposób.

 

Nazwałeś to "Początki z game maker", a to nie są żadne początki. Nic nie wytłumaczyłeś, a od razu wyjaśniasz kod.

Napisałem DOKOŃCZĘ

Odnośnik do komentarza
Udostępnij na innych stronach

Nie ucz paskudnych nawyków.

1. W warunkach pętli if, używamy == zamiast =.

2. Po linijkach stawiamy średniki.

3. Formatujemy kod.

4. Nie używamy krótkich nazw zmiennych, z których nie można się nic domyśleć.

5. Należy używać else if bądź pętli switch (jeśli takowa istnieje w gml, nie pamiętam).

Poprawiłem ten kod trochę:

 

GML
wybor = 0;

menu = show_message_ext("Co chcesz kupić?","Broń?","Teren?","Nic?");

 

if menu == 1 {

wybor=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie");

if (wybor == 1) and (score>20) and (bron == 0) {

bron = 1

wybor = 0

score -= 20;

}

}

else if menu == 2 {

wybor = show_message_ext("To będzie kosztowało 10 kryształów. Czy potwierdzasz zakup?","Tak","","Nie");

if (wybor == 1) and (score > 10) and (global.teren < 3) {

global.teren += 1;

wybor = 0;

score -= 10;

}

}

 

Dzięki postaram się poprawić.

Odnośnik do komentarza
Udostępnij na innych stronach

Propo else zamiast switch to kiedyś, gdzieś czytałem, że ponoć switch z 2 opcjami jest kilkakrotnie szybszy niż if z else, a przy większej ilości opcji to już chyba naturalne. Prawda to? Bo jeżeli tak to może nawet lepiej :P Chociaż dla mnie zawsze(przyzwyczajenie) bardziej czytelny będzie if.

Odnośnik do komentarza
Udostępnij na innych stronach

Propo else zamiast switch to kiedyś, gdzieś czytałem, że ponoć switch z 2 opcjami jest kilkakrotnie szybszy niż if z else, a przy większej ilości opcji to już chyba naturalne. Prawda to? Bo jeżeli tak to może nawet lepiej :P Chociaż dla mnie zawsze(przyzwyczajenie) bardziej czytelny będzie if.

 

mtEA2GD.png

Test wykonany w ten sposób:

GML
timeStart = current_time;

 

zmienna1 = 0;

zmienna2 = 1;

 

repeat ( 100000000 )

{

if ( zmienna1 == 0 )

{

zmienna2 = 50;

} else if ( zmienna1 == 1 ) {

zmienna2 = 100;

}

}

 

time1 = current_time - timeStart;

timeStart = current_time;

 

repeat ( 100000000 )

{

switch ( zmienna1 )

{

case 0: zmienna2 = 50; break;

case 1: zmienna2 = 100;

}

}

 

time2 = current_time - timeStart;

 

show_message( "Czas ifa: " + string(time1) + "#Czas switcha: " + string(time2) );

Odnośnik do komentarza
Udostępnij na innych stronach

No i patrz, nie posłuchał.

GML
global.bron=0

pot=0

global.teren=0

 

GML
global.bron = 0;

global.teren = 0;

wybor = 0; // przeciez ja ci zamienilem w tamtym kodzie pot na wybor!</span>

 

Po tym jest napisane if menu=1 {pot=show_message_ext("To będzie kosztowało 20 kryształów. Czy potwierdzasz zakup?","Tak","","Nie")

"Skąd ty ten kod wytrzasnąłeś?" - typowy użytkownik

 

Dalej mamy tak samo tylko tym razem game maker sprawdza czy mamy ponad 10 krzyształów i czy nie mamy maksymalnego poziomu terenu. ]

"Krzyształy", hehe.

 

GML
mp_potential_step_object (Gracz.x, Gracz.y, 1, Kamien)

 

Ten kod ^^^ obstawiam, że ci się nie skompiluje. A na 100% będzie miał problemy z kilkoma graczami.

Odnosisz się do objectu, a nie do instance. Robisz w ty momencie błąd.

Ja bym to przerobił na

GML
graczX = -1;

graczY = -1;

with (Gracz) {

other.graczX = x;

other.graczY = y;

}

if (graczX != -1) and (graczY != -1) { // a co jesli gracz nie istnieje?

mp_potential_step_object(graczX, graczY, 1, Kamien);

}

 

Słowo potential kojarzy nam się z inteligenncją.

nie

 

Pierwszy argument (Gracz.x) - koordynacja x, do której ma podążać obiekt.

Drugi argument (Gracz.y) - koordynacja y, do której ma podążać obiekt.

raczej koordynat :thumbsup:

 

GML
if global.teren == 1 {destroy_instance();}

Powodzenia z kompilowaniem nieistniejącej funkcji :thumbsup: No chyba, że zrobiłeś własną.

 

3/10 za starania i dobre chęci

Odnośnik do komentarza
Udostępnij na innych stronach

1. W tej gierce gracz akurat ma istnieć

2. No tak... destroy_instance Musiało mi się coś pomieszać.

3. Słowo potential NIEKTÓRYM (nie nie tylko mnie :D) kojarzy się z inteligencją

4. Trzeciej uwagi nie zrozumiałem... Przecież każdy normalny patrzy na malutkie tabelki z kodami ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Nawet ja pamiętam, że to było instance_destroy();

gamemaker nie wymaga stawiania ";" na końcu lini, wg mnie to niepotrzebne

po co dawać if i==4 jak mozna if i=4, po co te utrudnienia?!

Jakie znowu utrudnienia? Jak się chce umieć programować to trzeba znać pewne zasady programowania. :)

Odnośnik do komentarza
Udostępnij na innych stronach

W tym wypadku to nie troll, a sarkazm.

Oboje macie trochę racji. GMowi nie robi różnicy czy jest = czy ==, oraz czy są średniki, albo tabulacja. Dlatego najważniejsze jest to aby kod był dla was czytelny i prosty.

asdfMaciej ma rację bo warto uczyć się dobrych nawyków, ale nie używanie średników w GM wcale nie jest złym nawykiem gdzie zgodzę się z kriso99. Czasami warto zaoszczędzić sobie trudu ruszania palcem o 3cm.

Śmiało mogę powiedzieć że używanie == do warunków logicznych jest bardzo dobrym nawykiem.

 

 

Natomiast to co pokazuje Opisek to przepis na zakalec, w dodatku przesolony kwasem solnym. (Rozumiecie? Kawas solny. :D)

Odnośnik do komentarza
Udostępnij na innych stronach

Literówka. :thumbsup: Powodzeniu w dalszym byciu moderatorem! :)

hahahahahhah to był dobry trol

 

a tak na serio jezeli ktos sie chce bawic w gamemakerze to po kiego grzyba ma sie uczyc nie potrzebnych nawyków

o boże nie zrobiłem średnika. Jestem złym programista, mój kod jest bezużyteczny, ide sie zabic :crying:
Odnośnik do komentarza
Udostępnij na innych stronach

No i zrobiła się dyskusja na temat czy stawiać ; czy też nie czy robić == czy też nie czy robić________tak___przy___________każdym______kodzie.

O co wam chodzi?!

 

 

 

 

_____ = spacja

(chociaż w tej dyskusji poprawniej napisać)

GML
___ == ["space"];
Odnośnik do komentarza
Udostępnij na innych stronach

Racja, walić spacje ://

GML
if moznaOdbijac==true{ moznaOdbijac=false przyspieszenie=0 szybkosc_paletki=other.yprev-other.y; if szybkosc_paletki==0{ kierunek=0+(180-kierunek) przyspieszenie=0.2; } else if szybkosc_paletki>0{ kierunek=0+(180-kierunek)+random_range(20,45); przyspieszenie=0.4; }else if szybkosc_paletki<0{ kierunek=0+(180-kierunek)-random_range(20,45) przyspieszenie=0.4; } x+=lengthdir_x(7,kierunek); y+=lengthdir_y(7,kierunek); alarm[0]=3; if szybkosc<14{ szybkosc+=przyspieszenie; with(oPaletka){ szybkosc=szybkosc+(other.szybkosc/szybkosc)*other.przyspieszenie; } } if global.particles==true{ part=part_type_create(); system=part_system_create(); emitter=part_emitter_create(system); part_system_depth(system,depth) part_emitter_region(system,emitter,x,x+-4,y,y+-76,ps_shape_line,ps_distr_linear); part_type_alpha3(part,1,1,1); part_type_color2(part,255,65280); part_type_shape(part,pt_shape_star); part_type_life(part,50,50); part_type_speed(part,4.27,7.79,0.68,0); part_type_direction(part,-20.56,5.53,0,0); part_type_gravity(part,0.66,177.27); part_type_orientation(part,0,0,-7.27,0,0); if szybkosc>9 and szybkosc<11{ part_emitter_burst(system,emitter,part,15); } else if szybkosc>=11 and szybkosc<13{ part_emitter_burst(system,emitter,part,20); }else if szybkosc>=13{ part_emitter_burst(system,emitter,part,35); } } }
Odnośnik do komentarza
Udostępnij na innych stronach

hahahahahhah to był dobry trol

 

a tak na serio jezeli ktos sie chce bawic w gamemakerze to po kiego grzyba ma sie uczyc nie potrzebnych nawyków

 

Gdyż większość użytkowników po kilku miesiącach stwierdza że GM jest za słaby na ich wyobraźnię i przerzucają się na inne języki programowania a tam już takich ustępstw nie ma, poza tym warto wyznaczyć jakieś reguły w pisaniu kodu tak aby był czytelny dla większości użytkowników bo często zdarza się tak że ludzie dają jakiś kod w pytaniach dla początkujących czy coś i jeśli te reguły są stosowane to łatwiej innym użytkownikom go rozgryźć. Oczywiście każdy user tutaj wie że GM jest bardzo wyrozumiały i oczywiście rozczytają kod w którym w warunkach będzie stosowany pojedyńczy znak "=" do porównywania, ale milej patrzy się na kod który jest zrobiony tak jak my zazwyczaj piszemy.

 

No i zrobiła się dyskusja na temat czy stawiać ; czy też nie czy robić == czy też nie czy robić________tak___przy___________każdym______kodzie.

O co wam chodzi?!

 

 

 

 

_____ = spacja

(chociaż w tej dyskusji poprawniej napisać)

GML
___ == ["space"];

 

W tym wypadku znakowi spacjii przypisujesz wartość _____ więc powinno być:

GML
" "=_____

 

PAMIĘTAJ!!!

= - przypisz

== - porównaj

chyba że wolisz z języka PASCAL, ale wtedy masz

:= - przypisz

= - porównaj

 

Nie wiem czy przypisanie z języka PASCAL działa w GM ale można szybko sprawdzić. ;P

 

[Edit]

@Amaterasu: Dlaczego napisz ja chętnie przeczytam... I jestem ciekaw co tam dasz w tym przykładzie że wszyscy będą go kopiować ;P

 

A tak co do oceny tego tutoriala to pamiętam jak wczoraj tu zajrzałem zacząłem czytać, ale rzeczy wydawały mi się na tyle proste że zrezygnowałem z dalszej lektury i wstrzymałem się z oceną. Myślę że ten tutorial pomoże w sumie najbardziej jego autorowi bo dostał już kilka wskazuwek, ale warto by było poprawić to i owo co piszą tutaj bardziej zaawansowani userzy bo faktycznie jak ktoś nowy zacznie szukać tutków i trafi tu to nie wiem czy będzie mu się chciało cały temat czytać.

 

[Edit2] miało wyjść mądrze a wyszło jak zawsze z błędem ortograficznym którego mi Firefox nie podkreślił, jak coś to już poprawiłem. ;P

Odnośnik do komentarza
Udostępnij na innych stronach

No dobra, średnik to oszczędność czasu, więc jak ktoś olewa ważne nawyki i nie chce nic umieć to ok, ale pisząc = i tak mamy palec na znaku "=", więc chyba nic się nie stanie jak nadusimy jeszcze raz na ten znak, czyż nie?

Ale najważniejsze - konsekwentność w kodzie. Jak piszesz ciągle "=" to bez sensu nagle pisać "==". :)

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