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

[Allegro 5]Funkcja do przezroczystości w klasie, program wysypuje się.

Ostatnio zmodyfikowano 2012-09-02 21:07
Autor Wiadomość
bingo009
Temat założony przez niniejszego użytkownika
[Allegro 5]Funkcja do przezroczystości w klasie, program wysypuje się.
» 2012-09-02 20:19:26
Witam was serdecznie, mam sobie taką klase:
C/C++
class ENEMY
{
private:
    unsigned short int lives;
    ALLEGRO_BITMAP * bitmap;
   
public:
    int x, y;
   
    ENEMY();
   
    ~ENEMY();
   
    void SubLive();
   
    void DrawEnemy();
   
};

No i w konstruktorze ładuje sobie potrzebną bitmapę, oraz ustawiam zmienne. Chciałbym też zrobić przezroczystość dla bitmapy. Ale nie ważne czy jest w konstruktorze, czy w metodzie; wywołanie metody, która zawiera tą funkcję:
C/C++
al_convert_mask_to_alpha( bitmap, al_map_rgb( 255, 0, 255 ) );

powoduje wysypanie programu. Debugger wskazuje na plik dbgheap.c, a dokładniej na tą linijkę:
C/C++
void * pvBlk = _nh_malloc_dbg_impl( nSize, nhFlag, nBlockUse, szFileName, nLine, & errno_tmp );

O co tu chodzi? Tu jest cały kod konstruktora:
C/C++
ENEMY::ENEMY()
{
    bitmap = al_load_bitmap( "Data/enemy.bmp" );
    if( !bitmap )
         fprintf( stderr, "Failed to load enemy bitmap!\n" );
   
    al_convert_mask_to_alpha( bitmap, al_map_rgb( 255, 0, 255 ) );
    lives = 3;
    x = 0;
    y = 0;
   
}
P-64263
RazzorFlame
» 2012-09-02 20:25:52
Jest możliwość że nie wczytuje obrazka. Nie wiem jak to jest w Allegro 5 ale myśle że powinieneś zrobić że kiedy POPRAWNIE zostanie wczytany obraz, wtedy dopiero dajesz ta maske

Edit:
Sory za offtop ale odnośnie poprzedniego tematu: Znalazłeś rozwiązanie? Jeśli nie to otwórz temat i pogadamy dalej... Nie ma sensu żebyś go zamykał jeśli jeszcze nie znalazłeś rozwiązania. Sory że wtedy tak napisałem ale poprostu mógłbyś powiedzieć dokładnie w czym problem bo samo sprawdzenie czy obiekt jest w środku innego obiektu jest proste. Hehe z pół roku temu na tym forum pojawił się post "Jak zrobić minecraft" XD
P-64264
bingo009
Temat założony przez niniejszego użytkownika
» 2012-09-02 20:29:30
No fakt, nie pomyślałem o tym. Faktycznie bitmapa enemy miała inną nazwę, niż ta w kodzie. Ale jak sie zabezpieczyć przed ponownymi sytuacjami. Normalnie dałbym return -1, ale w klasie to raczej nie działa?
P-64265
RazzorFlame
» 2012-09-02 20:31:09
Działa działa. Poprostu zrób sobie w normalnej funkcji te ładowanie i tą maske a później w konstruktorze ją wywołaj.

Edit:
O właśnie. Jesli korzystasz z Code::Blocks to nie będzie ci wyświetlało tekstu związanego z błędem jeśli masz ustawione GUI application
P-64266
bingo009
Temat założony przez niniejszego użytkownika
» 2012-09-02 20:38:34
Korzystam z Visual Studio 2010, ale pomysł z oddzielną funkcją mi się podoba. Tylko przydałoby się jeszcze niszczyć tworzony obiekt, jeżeli nie udało się załadować zasobów. Jak to zrobić z poziomu klasy?
P-64267
RazzorFlame
» 2012-09-02 20:41:18
Hmm przyznam zgasiłeś mnie. Może spróbuj wywołać destruktor w tej funkcji ale nie sądze by to było możliwe. Nigdy czegoś takiego nie zrobiłem. Właśnie przeczytaj moj post (edit z drugiego) jeśli jeszcze nie przeczytałeś.
Poszukam coś w google może znajde.

Edit: Myśle że dynamiczne elementy klasy byłyby rozwiązaniem ale nie jestem pewien
P-64269
waxx
» 2012-09-02 20:45:10
obiekty i tak powinny byc wskaznikami [skrot myslowy-rob je dynamicznie], mozesz zrobic funkcje create ktora thrownie wyjatek / albo po prostu zwroci boola i najwyzej uzyc delete...ale to i tak tbh niewazne bo jak ci sie wysypie przy inicie to i tak konczysz gre z pieknym error msg-em.
P-64270
bingo009
Temat założony przez niniejszego użytkownika
» 2012-09-02 20:46:33
Czytałem, ale mi chodzi o to, że jak użytkownik zmieni sobie bitmape, to wtedy program najzwyczajniej w życiu się wysypie, a mi zależy na tym, aby dać ładny komunikat. Te wyświetlanie na konsoli jest narazie dla testów, jak ukończe gre, to dam jakieś ładne dialogi.

Edit: A tak się cieszyłem, ze wkońcu zrozumiałem ideę programowania obiektowego, a tu taka przeszkoda... Zależy mi, aby wydana gra była dopięta na ostatni guzik, więc raczej dziwaczny, niezrozumiały dla szarego usera błąd, który nic nie mówi, raczej nie wchodzi w grę.
P-64271
« 1 » 2
  Strona 1 z 2 Następna strona