Eli HTML löytyy <map> tagi johon voi määrittää x, y akselissa jonkinnäköisen alueen joka toimii omalla tavallaan sitten.
Löytyykö valmista / vinkkejä jos ei löydy että miten voisi tehdä tälläinen C++??
Esimerkiksi:
Piirretty kuva liittyen asiaan
Eli yläpuolella oleva linkki vie kuvaan josta selostan nyt hieman:
Harmaa alue on tietä ja mustat alueet seiniä. Punainen viiva kuvaa sitä "map" komentoa.. Eli miten tuollaisen voisi toteuttaa? Tarkistetaan sen jälkeen vain että jos tuosta kohdasta jotain löytyy niin PAM.. :D
Eiköhän se ole helpointa määritellä esim. polygoniolio ja sille vain toteuttaa funktio contains(point). Sitten lätkit kuvan polygonit listaan ja looppaat listan läpi tarkistaen, löytyykö kyseinen piste (kursorin koordinaatti) jostain polygonista. Noudattaen siis täydellisesti HTML-version logiikkaa.
Tietty monista kirjastoista löytyy valmiiksi kaikki tarvittavat palaset.
mika132: termi, jota haet, on 'törmäystarkistus' (collision detection). Sillä hakemalla luulis löytyvät materiaalia täältäkin.
hmm.. tuossa luettuani oppaita tein tälläisen viritelmän:
namespace Game { static SDL_Rect wall; static SDL_Rect box; //The square class Square { private: SDL_Rect box; int xVel, yVel; public: Square(); void handle_input(); void move(); void show(); }; static int SQUARE_WIDTH=100; static int SQUARE_HEIGHT=100; } Game::Square::Square() { //Initialize the offsets box.x = 0; box.y = 0; //Set the square's dimensions box.w = SQUARE_WIDTH; box.h = SQUARE_HEIGHT; //Initialize the velocity xVel = 0; yVel = 0; } void Game::Square::move() { //Move the square left or right box.x += xVel; //If the square went too far to the left or right or has collided with the wall if( ( box.x < 0 ) || ( box.x + SQUARE_WIDTH > RESOLUUTIO_LEVEYS ) || ( check_collision( box, wall ) ) ) { //Move back box.x -= xVel; } //Move the square up or down box.y += yVel; //If the square went too far up or down or has collided with the wall if( ( box.y < 0 ) || ( box.y + SQUARE_HEIGHT > RESOLUUTIO_KORKEUS ) || ( check_collision( box, wall ) ) ) { //Move back box.y -= yVel; } } bool Game::check_collision( SDL_Rect A, SDL_Rect B ) { //The sides of the rectangles int leftA, leftB; int rightA, rightB; int topA, topB; int bottomA, bottomB; //Calculate the sides of rect A leftA = A.x; rightA = A.x + A.w; topA = A.y; bottomA = A.y + A.h; //Calculate the sides of rect B leftB = B.x; rightB = B.x + B.w; topB = B.y; bottomB = B.y + B.h; //If any of the sides from A are outside of B if( bottomA <= topB ) { return false; } if( topA >= bottomB ) { return false; } if( rightA <= leftB ) { return false; } if( leftA >= rightB ) { return false; } //If none of the sides from A are outside B return true; }
En nyt kuitenkaan tiedä miten saan tuon käyttöön koska oppaassa josta tuon otin ei sen tarkempaa asiasta puhuta.
Siis saan toimimaan nämä:
SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0xFF, 0xFF, 0xFF ) ); SDL_FillRect( screen, &wall, SDL_MapRGB( screen->format, 0x77, 0x77, 0x77 ) );
mutta en näitä:
mySquare.move(); mySquare.show();
valittaa että ei ole mySquarea.. joten pistin tuon kohdan
Game::Square.move();
sitten se valittaa:
error: expected unqualified-id before '.' token
Eli miten tuo määritellään?
Tuollahan ne on jimi-kimin linkkaaman oppaan paketissa. Ja kai ny luokkia osaat käyttää? o_O Jos et, niin mene ihmeessä jonkun c++-oppaan kimppuun.
Square mySquare; mySquare.herpDerp();
Aihe on jo aika vanha, joten et voi enää vastata siihen.