Problem z napisaniem prostej gry - losowanie

dział ogólny

Re: Problem z napisaniem prostej gry - losowanie

Nowy postprzez gregory » poniedziałek, 14 czerwca 2010, 15:51

Najlepiej będzie jak załączę swój projekt, bo nie wiem co może być przyczyną.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
gregory
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): środa, 17 lutego 2010, 17:36
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows 7Chrome

Re: Problem z napisaniem prostej gry - losowanie

Nowy postprzez Cyfrowy Baron » poniedziałek, 14 czerwca 2010, 17:16

Po pierwsze to:

Kod: Zaznacz cały
delete [] kulki;


jest nieprawidłowe.



Nie ma błędu w kodzie, to Ty popełniłeś błąd. Obiekt Panel 1 ma wysokość (Height) 81 a w kodzie mamy:

Kod: Zaznacz cały
kulki[i]->Top = 137;


czyli 137! Musisz więc zwiększyć wysokość obiektu Panel1, albo wyżej rysować kulki. Jeżeli kulki mają być wyśrodkowane w pionie to można to zrobić tak:

Kod: Zaznacz cały

void __fastcall TForm1
::FormCreate(TObject *Sender)
{
    
int left 90;
    for(
int i 06i++)
    {
        
kulki[i] = new TShape(this);
        
kulki[i]->Parent Panel1;
        
kulki[i]->Shape stEllipse;
        
kulki[i]->Width 58;
        
kulki[i]->Height 58;
        
kulki[i]->Left left;
        
kulki[i]->Top = (Panel1->Height kulki[i]->Height) / 2;
        
left += 85;
    }
}
 


I działa :lol: :lol: :lol:

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
gregory
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z napisaniem prostej gry - losowanie

Nowy postprzez gregory » poniedziałek, 14 czerwca 2010, 17:26

Cyfrowy Baron napisał(a):Po pierwsze to:

Kod: Zaznacz cały
delete [] kulki;


jest nieprawidłowe.

Dlaczego jest to nieprawidłowe? Przecież kulki to tablica? A powinno być delete kulki?

Cyfrowy Baron napisał(a):Nie ma błędu w kodzie, to Ty popełniłeś błąd. Obiekt Panel 1 ma wysokość (Height) 81 a w kodzie mamy:
Kod: Zaznacz cały
kulki[i]->Top = 137;

czyli 137! Musisz więc zwiększyć wysokość obiektu Panel1, albo wyżej rysować kulki.

Nawet nie wiedziałem, że jest jakaś zależność między wysokością panelu a wysokością obiektów TShape.
W każdym razie wielkie dzięki, męczyłem się z tym a teraz to już mogę brać się za dalszą robotę.
Avatar użytkownika
gregory
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): środa, 17 lutego 2010, 17:36
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows 7Firefox

Re: Problem z napisaniem prostej gry - losowanie

Nowy postprzez polymorphism » poniedziałek, 14 czerwca 2010, 17:49

Dlaczego jest to nieprawidłowe?

Dlatego, że kulki to tablica statyczna, więc zwalniać jej nie możesz.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z napisaniem prostej gry - losowanie

Nowy postprzez Cyfrowy Baron » poniedziałek, 14 czerwca 2010, 19:36

gregory napisał(a):Nawet nie wiedziałem, że jest jakaś zależność między wysokością panelu a wysokością obiektów TShape.


Z tej wypowiedzi wnioskuję, że nie rozumiesz zależności między parent - child. Nie chodzi o wysokość obiektów kulki lecz o ich pozycję Top. Obiekty kulki typu TShape mają za rodzica obiekt Panel, więc koordynaty, tutaj Top i Left muszą być określane względem obiektu Panel1 a nie GroupBox1, gdyż to Panel1 jest ich rodzicem. Koordynaty obiektu określasz zawsze względem lewego górnego rogu rodzica (Parent) i nie ma znaczenia, że ma on innego rodzica niż formularz. Gdybyś umieścił kulki na formularzu wtedy podałbyś koordynaty względem formularza, gdybyś umieścił je na GroupBox1 wtedy określiłbyś je względem GropuBox1, a ponieważ umieściłeś je na Panel1 to określasz koordynaty względem Panel1.

A teraz zastanów się, Panel1 ma wysokość (Height) 81, a Ty umieszczasz kulki na wysokości (Top) 131, czyli poniżej obszaru roboczego (widocznego) obiektu Panel1, więc one tam są, ale ponieważ znajdują się poza obszarem roboczym to ich nie widać.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 10 gości