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

[SFML] Mapa kafelkowa

Ostatnio zmodyfikowano 2012-12-14 20:31
Autor Wiadomość
Menos
Temat założony przez niniejszego użytkownika
[SFML] Mapa kafelkowa
» 2012-12-14 13:38:42
Mam problem z tworzeniem mapy. Uzywam map kafelkowych i tworze je za pomoca odpowiednich odnosnikow w tablicy.

tab1[10][10]
{1,1,1,1,1,1,1,1,1,1}
{1,1,1,1,1,1,1,1,1,1}
{1,1,1,1,1,1,1,1,1,1}
{1,1,1,1,1,1,1,1,1,1}
{1,1,1,1,1,1,1,1,1,1}
{1,1,1,1,1,1,1,1,1,1}
{1,1,1,1,1,1,1,1,1,1}
{1,1,1,1,1,1,1,1,2,2}
{1,1,1,1,1,1,1,1,2,2}
{1,1,1,1,1,1,1,1,2,2}

Chce aby 2 było np wodą i nie dało sie na niego wejść a 1 była by ziemią.
Chce też mieć 2 tablice taką po której poruszał by sie gracz, aby nie ingerować w tablice z podłożem i żeby nie wymieniać i nie rysować ciągle tego samego.Robie 2 tablice ktora zawierala by tylko elementy z ktorymi moge działać np jakieś itemy czy potki. Poruszać sie po tab2 ale jako basground miec tab 1.

tab2[10][10]
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,5,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}
{0,0,0,0,0,0,0,0,0,0}

Widzialem też rozwiazanie inne... ale niestety nie pamietam teraz gdzie. Było to zrobione na 1 tablicy :

0:b oznaczalo by element wyswietlany jako bacground. tylko niestety nie pamietam nic wiecej....

tab2[10][10]
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}
{0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b,0:b}



Ktoś by mógł jakoś mi wytłumaczyć co mam zrobić zeby otrzymać jakies rozwiazanie , nie ważne jakie czy z 1 tablicą czy z dwiema wazne aby działało;)






Jak mam to zrobić?
P-70970
DejaVu
» 2012-12-14 15:16:30
Frazy, które należy wpisać w wyszukiwarkę google:
P-70978
Menos
Temat założony przez niniejszego użytkownika
sfml mapa
» 2012-12-14 20:16:38
Dobra a jak chce żeby narysowałą właśnie taką mape i che na niej umieścić jakieś elementy z którymi bede mógł wejść w interakcje nie naruszając struktury kafelków.Poprostu żebym narysował raz tylko tą mape i żeby wiecej w nią nie ingerował? Bo teraz jak mam mape i ustawiam  gdzieś swojego "ludzika" to żeby przesunąc sie w lewo musze zamienić kafelek na który chce przejść na Sprite gracza i dodatkowo zamienić kafelek z którego przyszedłem na sprajt podłoża.... Chce to ominąc właśnie żeby nie trzeba było ingerować w podłoże.

Dziekuje za odpowiedzi;)
P-71023
SeaMonster131
» 2012-12-14 20:18:10
Nie lepiej po prostu wyświetlać mapę, a później osobno wyświetlać gracza?
C/C++
wyswietlanie_mapy();
wyswietlanie_gracza(); '

O kolizjach możesz poszukać:
Frazy, które należy wpisać w wyszukiwarkę google:
P-71025
DejaVu
» 2012-12-14 20:21:46
@Menos: tak się gier nie robi. Przeciętna współczesna karta graficzna ma taką wydajność, że spokojnie wyrenderuje prostą scenę w grze nawet i 500 razy na sekundę. Skup się na tym, aby gra działała prawidłowo i była napisana w prosty sposób, a nie na tym, żeby była napisana optymalnie, bowiem zaraz dojdziesz do punktu w projekcie, w którym stwierdzisz, że trzeba wszystko zacząć 'od nowa'.
P-71027
Menos
Temat założony przez niniejszego użytkownika
sfml
» 2012-12-14 20:21:47
@DejaVu właśnie o to chodzi że nie wiem czy może być tak żeby mapa sie za każdym razem rysowała od nowa po poruszeniu sie "ludzika" o 1 do przodu. Bo takie coś już zrobiłem teraz chce tylko zrobić żeby tak własnie nie było. Poprostu raz rysujemy podłoże a potem tylko ruszamy sie ludzikiem czy tam zbieramy monety czy wchodzimi do drzwi.
P-71028
DejaVu
» 2012-12-14 20:23:09
@up: skoro nie wiesz jak mapę wyświetlić to znaczy, że nie znasz pętli, a więc powinieneś najpierw opanować podstawy programowania.

/edit:
Widzę, że edytowałeś posta :P Renderuj za każdym razem scenę od nowa - nawet jeżeli ludzik się nie poruszy. Tak się gry robi i tak się je również robiło gdy komputery miały 30-krotnie mniejszą moc obliczeniową.
P-71029
Menos
Temat założony przez niniejszego użytkownika
sfml
» 2012-12-14 20:31:03
TYlko nie wiem jak sie tu wkleja kod dokładnie... wiec przepraszam za błędy:
Poruszanie sie Mario po małej planszy wyboru wejśćia.
I o to chodzi że mapa sie rysuje cały czas za każdym razem gdy sie poruszymy.
Oczywiście musze to przerobić na obiektowe ale narazie sie bawie tak
C/C++
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cstdio>
#include <conio.h>
using namespace std;
using namespace sf;


int main()
{
   
    RenderWindow App( VideoMode( 500, 500, 32 ), "..." );
    App.SetFramerateLimit( 100 );
   
   
   
    int map_x = 0, map_y = 0;
    int tempx, tempy;
   
   
    Image ki1, ki2, ki3;
   
    ki1.LoadFromFile( "tiles10.png" );
    ki2.LoadFromFile( "mario.png" );
    ki3.LoadFromFile( "chodnik.png" );
    Sprite k1, k2, k3;
   
    k1.SetImage( ki1 );
    k2.SetImage( ki2 );
    k3.SetImage( ki3 );
    k2.SetScale( 0.13, 0.13 );
    k1.SetScale( 0.5, 0.5 );
   
    int mapa[ 3 ][ 15 ] = {
        { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
        { 3, 5, 3, 3, 3, 5, 3, 3, 3, 5, 3, 3, 3, 1, 3 },
        { 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3 } };
   
   
   
   
    while( App.IsOpened() )
    {
        Event zdarzenie;
        while( App.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == Event::Closed )
            {
                App.Close();
                cout << "zamkniecie" << endl;
            }
           
           
        }
       
        const Input & sterowanie = App.GetInput();
        if( sterowanie.IsKeyDown( Key::Left ) )
        {
            if( mapa[ tempy ][ tempx - 1 ] != 3 )
            {
                mapa[ tempy ][ tempx ] = 1;
                tempx = tempx - 1;
               
                mapa[ tempy ][ tempx ] = 2;
                k2.FlipX( 90 );
                cout << tempy << "  " << tempx << endl;
            }
           
           
           
           
        }
       
        if( sterowanie.IsKeyDown( Key::Right ) )
        {
            if( mapa[ tempy ][ tempx + 1 ] != 3 )
            {
                mapa[ tempy ][ tempx ] = 1;
                tempx = tempx + 1;
                mapa[ tempy ][ tempx ] = 2;
                k2.FlipX( 0 );
                cout << tempy << "  " << tempx << endl;
            }
           
        }
       
        if( sterowanie.IsKeyDown( Key::Up ) )
        {
            if( mapa[ tempy - 1 ][ tempx ] != 3 )
            {
                mapa[ tempy ][ tempx ] = 1;
                tempy = tempy - 1;
                mapa[ tempy ][ tempx ] = 2;
                cout << tempy << "  " << tempx << endl;
            }
           
        }
        if( sterowanie.IsKeyDown( Key::Delete ) )
        {
            if( mapa[ tempy ][ tempx ] != 3 and mapa[ tempy ][ tempx ] != 1 and mapa[ tempy ][ tempx ] != 2 ) // musi stac przed drzwiami!!!!!
            {
               
               
                cout << "wchodze" << endl;
               
            }
           
           
        }
       
        App.Clear( Color( 23, 12, 42 ) );
        map_y = 50;
        for( int i = 0; i < 3; i++ )
        {
            map_x = 0;
            for( int j = 0; j < 15; j++ )
            {
                if( mapa[ i ][ j ] == 1 or mapa[ i ][ j ] == 3 )
                {
                    k1.SetPosition( map_x, map_y );
                    App.Draw( k1 );
                }
                if( mapa[ i ][ j ] == 2 )
                {
                   
                    k2.SetPosition( map_x, map_y );
                    tempx = j;
                    tempy = i;
                    App.Draw( k2 );
                   
                }
                if( mapa[ i ][ j ] == 5 )
                {
                    k3.SetPosition( map_x, map_y );
                    App.Draw( k3 );
                   
                   
                }
               
               
                map_x += 32;
            }
            map_y += 32;
           
        }
       
        App.Display();
        _sleep( 80 );
    }
   
   
   
   
    cout << "koniec" << endl;
   
    return 0;
}
P-71033
« 1 »
  Strona 1 z 1