[C++, SFML]Duża tablica dynamiczna, problem
Ostatnio zmodyfikowano 2012-11-19 18:29
bingo009 Temat założony przez niniejszego użytkownika |
[C++, SFML]Duża tablica dynamiczna, problem » 2012-11-18 15:51:13 Witam was serdecznie, otóż piszę sobie edytor map 2D i mam problem. Na początku w konsoli podaje szerokość mapy(wysokość zawsze ta sama) i tworzę tablicę dynamiczną i tej szerokości i wysokości 12. Działa to jak należy, ale jak podam wartość szerokość mniejszą od 3 i większą od 65 zaczynają się problemy. Kiedy później usiłuję załadować sf:;Texture, to program wywala mi błąd pokazując na jakaś funkcję w pliku malloc.c. O co tutaj chodzi? Wrzucam cały kod(wiem, że paskudnie napisany, ale to taki na szybko edytor): #include <iostream> #include <vector> #include "Kafel.h"
using namespace std; using namespace sf;
int szerokosc; int aktywnykafel = 0; char ** mapka; int kafelek; int mapax = 0; vector < Tile > kafelki; RenderWindow window( VideoMode( 640, 480, 32 ), "Map Editor" ); Sprite pusty;
void CreateTab( int w ) { mapka = new char *[ w ]; for( int x = 0; x < w; x++ ) mapka[ x ] = new char[ 12 ]; for( int x = 0; x < 12; ++x ) for( int z = 0; z < w; ++z ) mapka[ x ][ z ] = 0; }
void DrawMap() { for( int i = 0; i < 12; ++i ) { for( int j = 0; j < szerokosc - mapax; ++j ) { kafelek = mapka[ i ][ j + mapax ]; kafelki[ kafelek ].setPosition( j * 40, i * 40 ); window.draw( kafelki[ kafelek ] ); } } }
int main() { for( int i = 0; i < 3; ++i ) { Tile kafelek( "teren.jpg", i * 40, 0, 40, 40 ); kafelki.push_back( kafelek ); } cout << "Podaj szerokosc mapy: "; cin >> szerokosc; CreateTab( szerokosc ); Event event; Texture pasek; Sprite pasek2; pasek.loadFromFile( "pasek.jpg" ); pasek2.setTexture( pasek ); pasek2.setPosition( 600, 0 ); while( window.isOpen() ) { while( window.pollEvent( event ) ) { if( event.type == Event::Closed ) window.close(); } window.clear(); DrawMap(); window.draw( pasek2 ); for( int i = 0; i < kafelki.size(); ++i ) { kafelki[ i ].setPosition( 600, i * 40 ); window.draw( kafelki[ i ] ); } window.display(); } for( int x = 0; x < szerokosc; x++ ) delete[] mapka[ x ]; delete[] mapka; return 0; }
Pominąłem klasę Tile, bo ona jest nie istotna w tym momencie. O co tutaj chodzi? Przypominam, problem zaczyna się po podaniu wartości szerokość mniejszej od 3 i większej od 65. |
|
DejaVu |
» 2012-11-19 16:15:54 Kiedy później usiłuję załadować sf::Texture, to program wywala mi błąd pokazując na jakaś funkcję w pliku malloc.c.
|
Czy w klasie Tile istnieje pole sf::Texture...? |
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-11-19 18:29:12 Instnieje jedynie statyczny obiekt sf::Texture w konstruktorze, sama klasa dziedziczy po sf::Sprite. |
|
« 1 » |