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

[SFML] Miganie mapy kafelkowej

Ostatnio zmodyfikowano 2013-08-03 13:21
Autor Wiadomość
bbcodepl
Temat założony przez niniejszego użytkownika
» 2013-08-03 12:13:35
Jest ona jako zmienna globalna:

C/C++
#include <SFML/Graphics.hpp>
#include <string>

using namespace sf;
using namespace std;

const int siatkaGry = 40, szerokoscAplikacji = siatkaGry * 20, wysokoscAplikacji = siatkaGry * 15, glebiaKolorow = 32;
const double wersjaGry = 1.0, szybkoscAplikacji = 1.0;
const string tytulAplikacji = "Dungeons and Mana";
const int szerokoscMap = 20, wysokoscMap = 15;
int aktualnaMapa[ wysokoscMap ][ szerokoscMap ], lokacjaPostaci = 1; // tutaj
int R = 35, G = 205, B = 15;

Image obrazekPierwszy;
Sprite spritePierwszy;
RenderWindow oknoAplikacji;

A w ifie jest tylko dopisywana jej wartość. To nie wiem.
P-89371
maly
» 2013-08-03 12:17:19
Masz dwie różne deklaracje oknoAplikacji jedno lokalne w main drugie globalne,zdecyduj z którego chcesz korzystać.
P-89372
pjpeg_objected
» 2013-08-03 12:21:00
Zgadza się. Poprzednia moja odpowiedź była błędna bo spojrzałem na ten pierwszy kod. Ale i tak mógłbyś zdefiniować mapę tylko raz na początku zamiast przy każdym obiegu pętli.
P-89373
bbcodepl
Temat założony przez niniejszego użytkownika
» 2013-08-03 12:22:58
Zrobiłem tak, bo, gdy zdefiniuje oknoAplikacji w zmiennych globalnych, a potem w main napisze nie poprzedzając  'RenderWindow'
C/C++
oknoAplikacji( VideoMode( szerokoscAplikacji, wysokoscAplikacji, glebiaKolorow ), tytulAplikacji );
 
pojawia mi się błąd kompilatora:
C/C++
--------------Build: Release in Test--------------

Compiling: main.cpp
F:\I nne\Programowanie\Programy\Test\main.cpp: In function 'int main()':
F:\I nne\Programowanie\Programy\Test\main.cpp: 62: error: no match for call to '(sf::RenderWindow) (sf::VideoMode, const std::string&)'
Process terminated with status 1( 0 minutes, 0 seconds )
1 errors, 0 warnings

A jeżeli bym napisał w samym main - nie będzie miał dostępu do funkcji rysujMape.

 
P-89374
pjpeg_objected
» 2013-08-03 12:25:14
Musisz wykorzystać funkcję Create(). Czyli: oknoAplikacji.Create( VideoMode( szerokoscAplikacji, wysokoscAplikacji, glebiaKolorow ), tytulAplikacji );
P-89375
bbcodepl
Temat założony przez niniejszego użytkownika
» 2013-08-03 12:39:44
Zniknął błąd kompilatora, ale nadal jest coś nie tak. Teraz wyświetla mi się tylko 1 obrazek w prawym, dolnym rogu.


Teraz mam taki kod:
C/C++
#include <SFML/Graphics.hpp>
#include <string>

using namespace sf;
using namespace std;

const int siatkaGry = 40, szerokoscAplikacji = siatkaGry * 20, wysokoscAplikacji = siatkaGry * 15, glebiaKolorow = 32;
const double wersjaGry = 1.0, szybkoscAplikacji = 1.0;
const string tytulAplikacji = "Test";
const int szerokoscMap = 20, wysokoscMap = 15;
int aktualnaMapa[ wysokoscMap ][ szerokoscMap ], lokacjaPostaci = 1;
int R = 35, G = 205, B = 15;

Image obrazekPierwszy;
Sprite spritePierwszy;
RenderWindow oknoAplikacji;

void rysujMape()
{
    oknoAplikacji.Clear();
    if( lokacjaPostaci == 1 )
    {
        int aktualnaMapa[ wysokoscMap ][ szerokoscMap ] =
        {
            { 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, 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, 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, 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 }
        };
       
        for( int y = 0; y < wysokoscMap; y++ )
        {
            for( int x = 0; x < szerokoscMap; x++ )
            {
                if( aktualnaMapa[ y ][ x ] == 1 )
                {
                    spritePierwszy.SetPosition( x * siatkaGry, y * siatkaGry );
                    oknoAplikacji.Clear( Color( R, G, B ) );
                    oknoAplikacji.Draw( spritePierwszy );
                }
            }
        }
    }
}

int main()
{
    obrazekPierwszy.LoadFromFile( "obrazekPierwszy.png" );
    obrazekPierwszy.SetSmooth( false );
    spritePierwszy.SetImage( obrazekPierwszy );
    oknoAplikacji.Create( VideoMode( szerokoscAplikacji, wysokoscAplikacji, glebiaKolorow ), tytulAplikacji );
   
    while( oknoAplikacji.IsOpened() )
    {
        Event zdarzenieAplikacji;
        while( oknoAplikacji.GetEvent( zdarzenieAplikacji ) )
        {
            if( zdarzenieAplikacji.Type == Event::Closed )
                 oknoAplikacji.Close();
           
        }
        rysujMape();
        oknoAplikacji.Display();
    } //PETLA GRY
}
P-89376
pjpeg_objected
» 2013-08-03 12:44:16
Wywal wszystkie funkcje Clear() z RysujMape() i daj ją w mainie przed RysujMape().
P-89377
bbcodepl
Temat założony przez niniejszego użytkownika
» 2013-08-03 12:46:20
No tak, dzięki :). Działa ładnie. Można zamknąć temat.
P-89378
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona