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

Problem z pętlami

Ostatnio zmodyfikowano 2008-05-11 03:27
Autor Wiadomość
maciek1316
Temat założony przez niniejszego użytkownika
Problem z pętlami
» 2008-05-10 18:14:03
Chciał bym zrobić obiekt(na przykład pocisk) który po przyciśnięciu klawisza leci w danym kierunku.Dlaczego w tym co napisałem klawisz "Z" nie jest brany pod uwagę(tak jakby pomijany)? pętla "do" uruchamia sie przy starcie programu dlaczego?
C/C++
do
{
    if( !key[ KEY_UP ] ) x++;
   
    if( !key[ KEY_DOWN ] ) x--;
   
    if( !key[ KEY_LEFT ] ) y++;
   
    if( !key[ KEY_RIGHT ] ) y--;
   
    if( !key[ KEY_Z ] ); //<----
   
    {
        do //<---
        {
            z++;
            blit( s2, bufor, 0, 0, z, a, 30, 30 );
            blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
        } while( z >= 800 );
       
    }
   
    clear_to_color( bufor, makecol( 146, 154, 140 ) );
    blit( s1, bufor, 0, 0, y, x, 30, 30 );
    blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
   
} while( !key[ KEY_Q ] );

P-669
DejaVu
» 2008-05-10 18:41:44
Fajnie, że taką wyrąbaną strzałkę zrobiłeś :) Właśnie w tamtym miejscu postawiłeś średnik po if'ie.
if( 1 == 0 ) /*tu miejsce na _zero_ lub jedną instrukcję*/;
C/C++
if( 1 == 0 ) //TU NIE MOŻE BYĆ ŚREDNIKA
{
    //tu może być milion instrukcji :)
}
P-671
maciek1316
Temat założony przez niniejszego użytkownika
» 2008-05-10 20:32:08
hmm kolejny bezsensowy temat:D Poprawiłem to i mam kolejny problem. Obiekt przemieszcza sie od początku i znika podczas naciśnięcia. Ja chciałem zrobić tak aby obiekt pokazał sie przy naciśnięciu klawisza i leciał na przykład w prawo.  
P-674
DejaVu
» 2008-05-10 20:55:44
Generalnie sprawa jest dość złożona... a może i nie :P Animację można wykonywać na kilka sposobów.
Twoje rozwiązanie to: po kliknięciu rysować coś w pętli dopóki nie zostanie warunek spełniony. Takie rozwiązanie blokuje Tobie możliwość wykonywania kilku różnych animacji jednocześnie np. ruch pocisku po kliknięciu klawisza i ruch pozostałych obiektów. Załóżmy, że wszystkie obiekty ruszają się na scenie, a Ty klikasz fire. W tym momencie cała scena robi freeze (zamarza w miejscu) i widać tylko przemieszczający się pocisk dopóki się pętla nie skończy.

Zalecane przeze mnie rozwiązanie to:
- Napisać pętlę główną, w której dodaje się różne sterowania klawiszy
- Naciśnięcie klawisza powinno ustawiać stany zmiennych dla danego obiektu tj. np.
C/C++
if( nacisnieto_esc == true )
{
    pokaz_pocisk = true;
    pocisk_pozycja_x = 40;
    pocisk_ruch_x = 3;
}
pocisk_pozycja_x += pocisk_ruch_x;
if( pocisk_pozycja_x >= 800 ) pokaz_pocisk = false;

if( pokaz_pocisk == true )
{
    //sprawdzanie czy pocisk w coś trafił itp.
   
    //wyświetlanie pocisku
}
Pocisk będzie leciał oczywiście dalej gdzieś w kosmos przy takim rozwiązaniu, ale Ciebie to nie będzie interesowało jeśli pokaz_pocisk!=true. Dodatkowo możesz wykonywać kilkadziesiąt/kilkaset animacji jednocześnie, wszystko w różnym kierunku i z różną prędkością.
P-675
maciek1316
Temat założony przez niniejszego użytkownika
» 2008-05-10 22:23:11
Już prawie dobrze ale dalej nie super... albo ja coś przekręciłem:D Obiekt(pocisk) jest wyświetlony od samego początku i cały czas go widać, a przy przyciśnięciu FIRE   faktycznie leci tylko stopuje(znika i pojawia sie w początkowym miejscu) gdy sie puści przycisk...Jak zrobić aby leciał do samego końca bez konieczności trzymania przycisku? Da sie zrobić tak żeby nie było widać pocisku przed kliknięciem?

Sorki ze Cię tak wykorzystuje, może kiedyś ja Ci w czymś pomoge:p   
P-676
DejaVu
» 2008-05-11 03:27:56
Zrób to co ja Ci napisałem wcześniej ;p zdycham po dzisiejszej imprezie ale była the best 4 ever, jak jutro będę w bardziej przystępnym stanie to coś mądrzejszego napiszę ;p cud że w klawisze trafiam ;p - chyba tylko dlatego że nie muszę patrzeć na tą deskę z klawiszami ;p dobranoc :D
/edit:
ehioo upokarzające... już trzeźwy potrafię sprawiać lepsze wrażenie upitego niż w stanie ogólnie niezalecanym ;p jak fajnie że jest niedziela... p wybacz ale musiałem to napisać ;p było suuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuper ;d
/edit#2:
I'm sailing... ;p Wprowadź zmienną typu bool i zmieniaj jej stan czy ma być pocisk widoczny czy nie. Dostałeś wyżej fragment kodu, który po dostosowaniu do Twojej aplikacji powinien działać.
P-677
« 1 »
  Strona 1 z 1