Skocz do zawartości

[C++][Allegro]Pierwszy projekt


donway

Rekomendowane odpowiedzi

to gra mi tak tnie czy jakims cudem zrobiles dziwnie klatkujacy ruch? :0

Odnośnik do komentarza
Udostępnij na innych stronach

ale dziwne ze mi tak klatkuje, jakby bylo z 10 fps

Odnośnik do komentarza
Udostępnij na innych stronach

lepiej zrobić viewa ktory bedzie ustawial kamere na danej pozycji.

Odnośnik do komentarza
Udostępnij na innych stronach

Przesuwają się tylko obiekty na tle co daje efekt jakby ludzik się przemieszczał,
Hehe, dzięki za wyjaśnienie.

Dopiero co zastanawiałem się, po kiego grzyba nie mogę sterować ludkiem tylko jakąś rurą, i to na dodatek sterowanie jest odwrotne... ;|

 

W ilu klatkach działa ta gra? Bo serio sprawia wrażenie, jakby działała w 15, a fraps nie działa na Allegro, więc nie sprawdzę.

Odnośnik do komentarza
Udostępnij na innych stronach

tylko, że nie wiem jak, dlatego wymyśliłem ten patent z przesuwającymi się obiektami =x

W weekend pisze tutek, więc się nauczysz tego i wielu innych rzeczy ;)

Ale generalnie pomysł masz dobry, jeśli w Allegro nie ma macierzy transformacji, to poszedłeś dobrą drogą by robić przesuwany view, tylko pewnie mocno namieszane i zastosowane spore obejście na około, ale to sie da poprawić.

Odnośnik do komentarza
Udostępnij na innych stronach

liczysz ilosc wystapien klatek w ciagu sekundy.

 

jak masz petle glowna gry:

// deklarujesz sobie zmienne
fps=0;
klatki=0;
sekunda=0;

// petla glowna gry
while(wykonuj==true)
{

<rysujesz i aktualizujesz gre>

// obliczanie fps
klatki++;
sekunda+=deltatime; // deltatime to czas w sekundach trwania ostatniej klatki
if(sekunda>1)
{
sekunda=0;
fps=klatki;
klatki=0;
}

}

no chyba ze allegro ma w sobie wbudowane obliczanie fps wiec poszukaj jak ta wartosc z niego pobrac

Odnośnik do komentarza
Udostępnij na innych stronach

No cóż.

Jak zapewne sam zauważyłeś otrzymujesz tutaj w znacznej większości komentarze negatywne(tak stało się również w przypadku twojego poprzedniego tematu). Etap, na którym aktualnie jesteś, to początki twojej nauki c++. Rzecz w tym, że w tym momencie publikowanie przez ciebie twoich aplikacji, które stworzyłeś ucząc się, bądźmy szczerzy, nie ma sensu. Musisz wiedzieć, że to co tutaj umieściłeś nie jest: ani dobrym przykładem, z którego inni mogli by się uczyć(zresztą po braku sourcea widać, że to nie było zamierzeniem), ani dobrze rokującym silnikiem, który inni mogliby skomentować i doradzić jak dalej rozwijać, ani grywalną grą(bądź demem, betą, alfą, czy jąkąś inną omegą), w którą można by popykać i podzielić się wrażeniami. To jest po prostu zarys twojego aktualnego etapu w nauce, twoje pierwsze kroki. To nie jest rzecz, którą powinneneś się dzielić z szerszą społecznością(ewentualnie, gdy prosisz o pomoc w odnalezieniu w niej błędu, czy masz inny problem jej dotyczący). Na to powinieneś poczekać. Jeżeli będziesz wytrwały, kreatywny i będziesz się przykładał do nauki korzystania z języka, to w końcu podzielisz się z nami swoją grą(tudzież inną aplikacją) i wtedy na pewno będziesz mógł liczyć po pierwsze na ocenienie i konstruktywny komentarz, a po drugie na to, że te oceny i komentarze będą pozytywne.

Odnośnik do komentarza
Udostępnij na innych stronach

ja uważam, że jakby zrobił dużą część gry w ten sposób, byłoby za późno na zmiany i mielibyśmy crapa.

 

ja tam scrolling realizuję w ten sposób:

mam dwie wartości: view_xview i view_yview (nawyk z GMa ;p). kiedy rysuję obiekty, odejmuję od współrzędnych te wartości.

 

tego, co jest w tym twoim demie, nie skomentuję. jeszcze oddzielne pliki dat dla wszystkich grafik. jak już to robisz w ten sposób, to spakuj potrzebne grafiki w jeden plik, bo inaczej to jest zbędne zawracanie swojej dupy, a można też wrzucić niekonwertowane grafiki. i tak twoich nikt nie będzie chciał kraść (na tym etapie, mam nadzieję)

Odnośnik do komentarza
Udostępnij na innych stronach

próbowałem wrzucić do 1 pliku dat ale byly jakies bledy wiec lepiej narazie tak, wytlumaczylbys bardziej szczegolowo swoj scrolling ? ;]

Jemu chodzi o to, że tworzysz dwie zmienne:

int view_xview = 0;            //pozycja x kamery, czyli punkt o współrzędnej x takiej jak ta zmienna będzie w lewym dolnym rogu 
int view_yview = 0;            //pozycja y kamery, czyli punkt o współrzędnej y takiej jak ta zmienna będzie w lewym dolnym rogu

Następnie, gdy przychodzi do rysowania, to grafikę zamiast rysować w punkcie (x, y), to rysujesz ją w punkcie (x-view_xview, y-view_yview)

Odnośnik do komentarza
Udostępnij na innych stronach

I jak idziesz w prawo to dodajesz do view_xview, w lewo odejmujesz, jak podskakujesz to dodajesz do y.

 

 

Lepiej z tym wstawianiem się nie spiesz, wolimy zobaczyć dokończoną i dopracowaną grę. I ty zapewne będziesz wolał czytać komentarze na temat dopracowanej wersji.

Mnie już samo słowo "niedługo", po tym, gdy jeszcze nic nie umiałeś odrzuca. I pamiętaj, że samo napisanie w C++ platformówki nie doda ci +2 do oceny, ludzie ocenią ją tak samo jakbyś napisał ją w GML, czy czymśtam.

Odnośnik do komentarza
Udostępnij na innych stronach

mam taki kod ale za **** nie mogę zrobić tego xview i yview zeby ekran sie przewijal.

Dam kod i prosiłbym, żeby ktoś mi pomógł bo sam nie wyrabiam ;>

 

#include <allegro.h>
#include "uni01.h"
#include "uni02.h"
#include "uni03.h"
#include "uni04.h"
int main() 
{
    allegro_init();
    install_keyboard();
    set_color_depth(16);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
    clear_to_color(screen,-1);
    
    BITMAP *bufor = NULL;
    bufor = create_bitmap(800,600);
        if(!bufor)
    {
              set_gfx_mode(GFX_TEXT,0,0,0,0);
              allegro_message("Blad bufora!");
              allegro_exit();
              }
    DATAFILE *uni01 = NULL;
    uni01 = load_datafile("uni01.dat");
    if(!uni01)
    {
              set_gfx_mode(GFX_TEXT,0,0,0,0);
              allegro_message("Nie mozna wczytac uni01!");
              allegro_exit();
              }
     DATAFILE *uni02 = NULL;
    uni02 = load_datafile("uni02.dat");
    if(!uni02)
    {
              set_gfx_mode(GFX_TEXT,0,0,0,0);
              allegro_message("Nie mozna wczytac uni02!");
              allegro_exit();
              }
              DATAFILE *uni03 = NULL;
    uni03 = load_datafile("uni03.dat");
    if(!uni03)
    {
              set_gfx_mode(GFX_TEXT,0,0,0,0);
              allegro_message("Nie mozna wczytac uni03!");
              allegro_exit();
              }
              DATAFILE *uni04 = NULL;
    uni04 = load_datafile("uni04.dat");
    if(!uni04)
    {
              set_gfx_mode(GFX_TEXT,0,0,0,0);
              allegro_message("Nie mozna wczytac uni04!");
              allegro_exit();
              }
    
    int lx=200,ly=450; //Zmienne bohatera
    int plx=300,ply=350;
    
    while (!key[KEY_ESC]) 
    {
    if(key[KEY_LEFT])plx+=10,masked_blit((BITMAP*)uni02[heros].dat,bufor,0,0,lx,ly,40,60);
    if(key[KEY_RIGHT])plx-=10,masked_blit((BITMAP*)uni01[hero].dat,bufor,0,0,lx,ly,40,60);
    if(key[KEY_UP])ly==400;
    if(ly<=400)ly==450;
    rest(80);
    clear_to_color(bufor,-1);
    blit((BITMAP*)uni03[podloga].dat,bufor,0,0,0,500,600,150);
    blit((BITMAP*)uni03[podloga].dat,bufor,0,0,200,500,600,150);
    masked_blit((BITMAP*)uni04[platforma].dat,bufor,0,0,plx,ply,80,155);
    masked_blit((BITMAP*)uni01[hero].dat,bufor,0,0,lx,ly,40,60);
    blit(bufor,screen,0,0,0,0,800,600);
    }
    allegro_exit();
    return 0;
}
END_OF_MAIN()

Odnośnik do komentarza
Udostępnij na innych stronach

nie, nie będę przerabiał twojego kodu tak, aby zrobić kamerę.

aż strach pomyśleć, jak ty zrobisz kolizje i skakanie.

weź się za coś prostszego.

a jak chcesz to skończyć:

ustawiaj view_xview i view_yview na pozycję bohatera i odejmuj połowę rozmiaru ekranu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...