• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Co mam napisac aby ava zeszla nizej bloka nie przechodzac przez blok?

0 głosów
265 wizyt
pytanie zadane 12 maja 2015 w C i C++ przez TheSadSmile Użytkownik (870 p.)

mam problem. Nie wiem jaki kod mam wpisac aby moja postac (ava) mogla stac belce (blok). Postac moze poruszac sie w lewo, prawo, gore i dol. Kiedy postac jest na belce, nie jest w stanie isc bardziej w dol. Problem polega na tym ze postac nie stojac na belce, nie moze zejsc nizej od wysokosci top belki. Co zrobilem zle? albo co powinien bym poprawic? 

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int x=-8;
int y=-8;


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if (Key == VK_LEFT) lewo->Enabled = true;
    if (Key == VK_RIGHT) prawo->Enabled = true;
    if (Key == VK_UP) gora->Enabled = true;
    if (Key == VK_DOWN)
    {
    dol->Enabled = true;

    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if (Key == VK_LEFT)  lewo->Enabled = false;
    if (Key == VK_RIGHT) prawo->Enabled = false;
    if (Key == VK_UP)    gora->Enabled = false;
    if (Key == VK_DOWN)  dol->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lewoTimer(TObject *Sender)
{
    if(ava->Left >= 5) ava->Left -= 10;


    if(ava->Left >= blok->Width) ava->Left -= 10;


}
//---------------------------------------------------------------------------
void __fastcall TForm1::prawoTimer(TObject *Sender)
{
    if(ava->Left+ava->Width < tlo->Width - 5) ava->Left += 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::goraTimer(TObject *Sender)
{
    if(ava->Top > 5) ava->Top -= 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::dolTimer(TObject *Sender)
{
    if(ava->Height <= tlo->Top) ava->Top += 10;


    if(ava->Top+ava->Height < blok->Top) ava->Top += 10;

    if(ava->Height+ava->Width > blok->Top+blok->Left) ava->Top -= 10;








}
//---------------------------------------------------------------------------





 

1 odpowiedź

0 głosów
odpowiedź 12 maja 2015 przez niezalogowany
W 71. linijce pisze, że jeśli położenie w osi y (Top) jest mniejsze niż belki, to wtedy twój AVAtar pójdzie o 10 w górę :| Jakby to był mój kod, to bym bardziej wszystko zrozumiał...
komentarz 13 maja 2015 przez TheSadSmile Użytkownik (870 p.)
Hhmmm... No to powiedzmy że ekran to pole po którym mój ava jest w stanie się poruszać. Co mam wpisac aby nie umial się poruszać w miejscu gdzie stoi belka? Żeby ta belka blokowała mu droge w prostej linii.

Podobne pytania

+1 głos
2 odpowiedzi 394 wizyt
–5 głosów
3 odpowiedzi 759 wizyt

93,691 zapytań

142,610 odpowiedzi

323,215 komentarzy

63,215 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...