GGG205 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Rysowanie po mapie » 2013-08-22 00:09:06 Witam ! Mam taki oto problem. 1.Nie mogę przypisać wartości do obiektu np: Obiekt = 1. Potrzebuję tego, aby zrobić mapę przy użyciu tablic np: int tablica[3] = {1,1,1}; 2.Jak uporam się z tym problemem chcę napisać "Edytor map", tyle że gdy rysuję po mapie to tylko jeden obiekt się tworzy i tylko jeden się przesuwa, wiem że musiał bym utworzyć wektora, ale zbytnio ich nie rozumiem więc też wolał bym użyć tablic do przechowywania tych kafelek. Drobny screen: http://s6.ifotos.pl/img/Beztytuup_nwpeanq.pngI oto kod: #include <SFML/Graphics.hpp> #include <string> #include <vector> #include <cmath> #include <conio.h> #include <iostream> #include <fstream> #include <windows.h>
using namespace sf; using namespace std;
RectangleShape Cube;
class postac { public: RectangleShape Player; postac() { Player.setSize( Vector2f( 20, 20 ) ); Player.setPosition( 20, 20 ); Player.setFillColor( Color( 150, 50, 250 ) ); } void Sterowanie() { if( Keyboard::isKeyPressed( Keyboard::Up ) || Keyboard::isKeyPressed( Keyboard::W ) ) Player.move( 0.0f, - 0.1f ); if( Keyboard::isKeyPressed( Keyboard::Down ) || Keyboard::isKeyPressed( Keyboard::S ) ) Player.move( 0.0f, 0.1f ); if( Keyboard::isKeyPressed( Keyboard::Left ) || Keyboard::isKeyPressed( Keyboard::A ) ) Player.move( - 0.1f, 0.0f ); if( Keyboard::isKeyPressed( Keyboard::Right ) || Keyboard::isKeyPressed( Keyboard::D ) ) Player.move( 0.1f, 0.0f ); } };
int main() { RenderWindow Window( VideoMode( 640, 480, 32 ), "Game - Sparda" ); Event zdarzenie; postac gracz; Cube.setSize( Vector2f( 20, 20 ) ); while( Window.isOpen() ) { while( Window.pollEvent( zdarzenie ) ) { switch( zdarzenie.type ) { case Event::Closed: Window.close(); break; case Event::MouseMoved: if( Mouse::isButtonPressed( Mouse::Left ) ) { Cube.setPosition( Vector2f( zdarzenie.mouseMove.x, zdarzenie.mouseMove.y ) ); } break; } } Window.clear(); gracz.Sterowanie(); Window.draw( Cube ); Window.draw( gracz.Player ); Window.display(); } return 0; } |
|
hincu |
» 2013-08-22 09:58:30 z mojego edytora, nie powinienes miec problemow w zrozumieniu tego bool Map::CheckTile( sf::RenderWindow & wnd ) { for( std::list < Tile *>::iterator it = TileList.begin(); it != TileList.end(); ++it ) { Tile & tile = ** it; if( tile.Z == currentlayer && tile.X == mouse.getPosition( wnd ).x / tilesize && tile.Y == mouse.getPosition( wnd ).y / tilesize ) { tile.X = mouse.getPosition( wnd ).x / tilesize; tile.Y = mouse.getPosition( wnd ).y / tilesize; tile.Z = currentlayer; tile.SpriteX = currenttile.SpriteX; tile.SpriteY = currenttile.SpriteY; return false; } } return true; }
void Map::AddTile( sf::RenderWindow & wnd ) { Tile * temptile = new Tile; temptile->X =( mouse.getPosition( wnd ).x +( - Pos.x * tilesize ) ) / tilesize; temptile->Y =( mouse.getPosition( wnd ).y +( - Pos.y * tilesize ) ) / tilesize; temptile->Z = currentlayer; temptile->SpriteX = currenttile.SpriteX; temptile->SpriteY = currenttile.SpriteY; TileList.push_back( temptile ); }
|
|
MrPoxipol |
» 2013-08-22 10:28:59 Za pewne chodziło o możliwość rysowania trzymając przycisk myszy, ja zarzucę kodzikiem z mojego edytora: #define setType(x, y, d) map[y][x] = d; tile[y][x].setTexture(tile_t[d]);
bool MapView::tileSet( sf::Vector2u coords ) { setType( coords.x, coords.y, currentTileType ); return true; }
void MapView::updateEvents( sf::Event * event, sf::RenderWindow & Window ) { if( event->type == sf::Event::MouseButtonPressed ) tile_pressed = true; if( event->type == sf::Event::MouseButtonReleased ) tile_pressed = false; if( tile_pressed ) { sf::Vector2i pos = sf::Mouse::getPosition( Window ); for( int i = 0; i < MAP_SIZE; ++i ) for( int j = 0; j < MAP_SIZE; ++j ) { if( tile_bounds[ j ][ i ].contains(( sf::Vector2f ) pos ) ) tileSet( sf::Vector2u( i, j ) ); } } }
Mam nadzieję, że chociaż trochę rozjaśniłem. /edit: Mogę jeszcze wrzucić funkcję do Bucket Fill'a jak by ktoś chciał ;> |
|
hincu |
» 2013-08-23 07:46:26 a co to za problem zrobic ifa czy przycisk jest wcisniety i wywolac metode? O_O
|
|
domin568 |
» 2013-08-23 17:28:32 Jeżeli ktoś nie zna dobrze SFMLA to może to nie być takie proste :) |
|
hincu |
» 2013-08-23 20:46:57 domin a co tam jest z sfml po za pobieraniem pozycji myszki w oknie? reszta to aktualizacja obiektu i dodanie go do listy... ktos tu kodu nie umie czytac xD |
|
domin568 |
» 2013-08-23 22:01:40 No ale trzeba sie z tym wszystkim oswoić , nie wszystko jest takie proste ... |
|
MrPoxipol |
» 2013-08-23 23:04:35 Żeby coś takiego zrobić, nie trzeba być geniuszem i mieć w jednym palcu SFML'a..wystarczy pomyśleć jak to ma działać. |
|
« 1 » |