Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Losowanie wartości

Ostatnio zmodyfikowano 2011-05-09 00:58
Autor Wiadomość
SeaMonster131
» 2011-05-05 19:39:39
Bo wyświetlasz dymek kiedy pr=true, a w tym if (od razu na początku) zmieniasz: pr=false. Tak mi się wydaje :p

Kod wstawiaj:  [cpp] kod [/cpp] :)
P-32708
thamiar
Temat założony przez niniejszego użytkownika
» 2011-05-05 19:43:22
Czy podmienię na początku czy pod koniec, nie ma różnicy. Bo i tak już wszedłem do pętli (chyba :P)
Nawet jak usunę tą pr=false niestety nic się nie zmienia.

Edit:wyświetlanie kodu poprawione!
P-32709
pekfos
» 2011-05-05 19:50:02
kod poprawiony. bezmyślne pisanie kodu się nie sprawdza :P
P-32710
thamiar
Temat założony przez niniejszego użytkownika
» 2011-05-05 20:05:22
Jedno mr ciągle jest ;)

Niemniej, coś z kodem ciągle knocę, bo wygląda jakby dla
C/C++
if( !key[ KEY_Z ] && pr ) {
    pr = false;
    //..
}
 warunek nigdy nie był spełniony.
P-32711
dmx81
» 2011-05-06 01:28:41
z tego co na szybko wyczytalem - to ten warunek powyzej bedzie spelniony tylko wtedy, gdy
- po pierwsze jest kolizja
- po drugie puscisz klawisz Z a "pr" bedzie ustawione na "true"
P-32732
dmx81
» 2011-05-06 01:40:16
C/C++
if( kolizja( player.x, player.y, player.s, player.w, enemy.x, enemy.y, enemy.s, enemy.w ) == true )
{ bool pr = false;
    if( key[ KEY_Z ] ) pr = true;
   
    if( !key[ KEY_Z ] && pr )
    { pr = false;
        if( hit == 1 ) { masked_blit( dymek, bufor, 0, 0, enemy.x + 10, enemy.y + 10, enemy.s, enemy.w ); } else; } }

a w tym kodzie widze to tak:

jesli kolizja to:
- ustaw pr jako false;
- jesli klawisz Z to pr = true;
- jesli nie wcisniety Z, to pr= false i jesli (wciaz nie wcisniety Z) i dodatkowo hit==1, to wyswietl dymek

niestety nie widze tutaj calego kodu - czyli w ktorym momencie ustalasz wartosc hit (i jakie inne moze przyjac wartosci z tego losowania, bo koledzy pisali rozne wersje, a nie wiadomo, czy cos zmieniles u siebie w kodzie (albo ja nie zauwazylem, bo oczy sie juz zamykaja...)
Pisze ci tak, zebys sam znalazl blad, bo w sumie nie wiem, co ma byc tu celem ( w czasie kolizji i nie wcisniety klawisz Z ma powodowac wyswietlanie dymka, jesli hit==1?)
Czy wyswietlasz sobie gdzies wartosc hit?
Czy wyswietlasz sobie gdzies, ze kolizja==true?
czy wyswieltasz sobie gdzies, jaki jest stan pr?

jesli nie, to poskladaj to do kupy i sam zaobserwujesz, w ktorym momencie pojawia sie blad.
Czasem zamiast gotowej odpowiedzi, lepiej jest dac inny punkt widzenia :)
Ale jesli powyzsze nie pomoze, to bedziemy szukac dalej
Napisz w razie czego, dokladniej, jaka ma zaistniec sytuacja, kiedy co powinno sie wydarzyc (czesto tez podczas pisania dokladnego opisu problemu, samemu znajdujemy odpowiedz...)
P-32733
thamiar
Temat założony przez niniejszego użytkownika
» 2011-05-06 12:14:42
Co jest aktualnie: Podczas kolizji, przy wciśnięciu "Z" postać wykonuje nieskończoną liczbę ataków z prędkością światła.
Co chciałbym osiągnąć: Jedno wciśnięcie "Z"=Jeden atak. (Oprócz tego grafika znika błyskawicznie z powodu podwójnego buforowania, ale to pytanie raczej na osobny temat ;) )
wiec:
[code]w czasie kolizji i nie wcisniety klawisz Z ma powodowac wyswietlanie dymka, jesli hit==1?[/code] Tak, dokładniej chodzi o to, by uniemozliwic nieustanny "atak" podczas przytrzymywania klawisza "Z".
[code]Czy wyswietlasz sobie gdzies wartosc hit?[/code]Nie, po prostu podstawiłem wartość. Niestety nie wiem jak w alegro wyswietlić wartość zmiennej (cout nie działa ;) )
[code]Czy wyswietlasz sobie gdzies, ze kolizja==true?[/code]Kolizja działa. Bez udziwniania z wciskaniem/odciskaniem "Z" dymek pojawia się po klikaniu w Z dopiero wtedy, gdy nastąpiła kolizja.
[codee]czy wyswieltasz sobie gdzies, jaki jest stan pr?[/codee] To samo co przy hit.

Aktualny kod:
C/C++
bool pr = false;
int hit = 0;

if( kolizja( player.x, player.y, player.s, player.w, enemy.x, enemy.y, enemy.s, enemy.w ) == true )
{ if( key[ KEY_Z ] ) pr = true;
   
    hit = rand() % 100;
    if( !key[ KEY_Z ] && pr == true )
    {
        if( hit <= 66 ) { masked_blit( dymek, bufor, 0, 0, enemy.x + 10, enemy.y + 10, enemy.s, enemy.w ); } else masked_blit( trafienie, bufor, 0, 0, enemy.x + 10, enemy.y + 10, enemy.s, enemy.w );
       
    } }
Co wyszło? Ano nie ma żadnego ataku, nie pojawia się dosłownie nic.
Zupełnie jakby if( key[ KEY_Z ] ) pr=true; nie reagowało. Kiedy wstawiłem odwrotnie tj. 
if( !key[ KEY_Z ]&&pr==false) ludzik atakował non-stop, dopóki nie wcisnę "Z". Także program przechwytuje klawisz, ale wygląda jakby wciśnięcie klawisza prócz samego faktu, że jest wciśnięty nie robi tego, co robić powinien.
P-32737
dmx81
» 2011-05-06 14:12:05
za pol godz przeczytam i odpisze :D
P-32741
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona