Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #####################
- WAY TO SPACE INDEV
- by Adam Pajkert
- #####################
- void Player::Update() // Aktualizacja logiki wywoływana 128 razy na sekundę ( 128tps )
- {
- // Wyłapujemy input związany z ruchem naszej postaci
- if( sf::Keyboard::isKeyPressed(sf::Keyboard::A) && sf::Keyboard::isKeyPressed(sf::Keyboard::D) == false )
- moveX( false ); // moveX( bool wPrawo )
- else
- if( sf::Keyboard::isKeyPressed(sf::Keyboard::D) && sf::Keyboard::isKeyPressed(sf::Keyboard::A) == false )
- moveX( true ); // moveX( bool wPrawo )
- if( sf::Keyboard::isKeyPressed(sf::Keyboard::Space) )
- jump();
- movementUpdate(); // Aktualizacja poruszania się ( płynne przyśpieszanie i wytracanie prędkości, czy opadanie lub skok )
- // Pozycję box colliderów
- eCoTop.setPosition( mPosX + 7, mPosY ); // Górny
- eCoDown.setPosition( mPosX + 7, mPosY + 176); // Dolny
- eCoDownB.setPosition( mPosX + 7, mPosY + 192); // Dolny najniższy -> sprawdza czy pod nami jest blok kolizyjny,
- // jeśli nie - postać spada niżej
- eCoLeft.setPosition( mPosX, mPosY + 12); // Lewy
- eCoRight.setPosition( mPosX + 80, mPosY + 12); // Prawy
- eCoAll.setPosition( mPosX, mPosY ); // Obszar zajmowany przez wszystkie, najpierw sprawdzamy z nim kolizję mapy kolizji.
- unsigned int j = 0; // zmienna pomocnicza, odpowiada za opadanie postaci gdy nie ma pod nią bloku
- // na początek pętla która przeleci przez wszystkie Collision Boxy z mapy kolizji
- for( unsigned int i = 0; i < CollMap->ColBox.size(); i++)
- {
- // najpierw sprawdzamy czy kolidują z obszarem w którym znajdują się collidery gracza
- if( CollMap->ColBox[i].intersects( sf::IntRect( eCoAll.getGlobalBounds().left, eCoAll.getGlobalBounds().top,
- eCoAll.getGlobalBounds().width, eCoAll.getGlobalBounds().height ) ) )
- {
- //jeśli tak, sprawdzamy resztę
- //Dolna kolizja
- if( CollMap->ColBox[i].intersects( sf::IntRect( eCoDown.getGlobalBounds().left, eCoDown.getGlobalBounds().top,
- eCoDown.getGlobalBounds().width, eCoDown.getGlobalBounds().height ) ) )
- { // ponieważ uderzył w ziemię....
- isJumping = false; // ustawiamy flagę skoku na 0
- isFalling = false; // ustawiamy flagę spadania na 0
- SpeedY = 0; // Zerujemy prędkość spadania
- mPosY = CollMap->ColBox[i].top - 192; // wyrównujemy pozycję tak,
- // aby postać była ponad collision boxem, nie stykając się z nim
- isModified = true; // Ustawiamy flagę która mówi nam że zmodyfikowaliśmy pozycję gracza.
- }
- if( CollMap->ColBox[i].intersects( sf::IntRect( eCoDownB.getGlobalBounds().left, eCoDownB.getGlobalBounds().top,
- eCoDownB.getGlobalBounds().width, eCoDownB.getGlobalBounds().height ) ) )
- { // teraz jeśli collider postaci ( odpowiedzialny za opadanie gdy pod postacią nie ma kolizji ) koliduje z collision boxem..
- j++; // zwiększamy wartość j
- }
- if( CollMap->ColBox[i].intersects( sf::IntRect( eCoTop.getGlobalBounds().left, eCoTop.getGlobalBounds().top,
- eCoTop.getGlobalBounds().width, eCoTop.getGlobalBounds().height ) ) )
- { // jeśli górny collider postaci złapał kolizję
- isJumping = false; // ustawiamy flagę skoku na 0
- isFalling = true; // ustawiamy flagę spadania na 1
- SpeedY = 0; // zerujemy prędkość spadania
- JumpY = 0; // zerujemy zmienną wysokości skoku ( nie ważne :D )
- mPosY = CollMap->ColBox[i].top + 64; // zmieniamy pozycję gracza tak by nie uderzał o sufit (górny)
- isModified = true; // standardowo flaga zmodyfikowanej pozycji
- }
- if( CollMap->ColBox[i].intersects( sf::IntRect( eCoLeft.getGlobalBounds().left, eCoLeft.getGlobalBounds().top ,
- eCoLeft.getGlobalBounds().width, eCoLeft.getGlobalBounds().height ) ) )
- { // analogicznie to powyższych dwóch sytuacji
- SpeedX = 0;
- mPosX = CollMap->ColBox[i].left + 64;
- isModified = true;
- }
- if( CollMap->ColBox[i].intersects( sf::IntRect( eCoRight.getGlobalBounds().left, eCoRight.getGlobalBounds().top,
- eCoRight.getGlobalBounds().width, eCoRight.getGlobalBounds().height ) ) )
- {
- SpeedX = 0;
- mPosX = CollMap->ColBox[i].left - 96;
- isModified = true;
- }
- if( isModified == true )
- { // tutaj aktualizujemy pozycję naszych bounding boxów gracza
- eCoTop.setPosition( mPosX + 7, mPosY );
- eCoDown.setPosition( mPosX + 7, mPosY + 176);
- eCoDownB.setPosition( mPosX + 7, mPosY + 192);
- eCoLeft.setPosition( mPosX, mPosY + 12);
- eCoRight.setPosition( mPosX + 80, mPosY + 12);
- eCoAll.setPosition( mPosX, mPosY );
- isModified = false;
- }
- }
- }
- if( j == 0 && isJumping == false )
- { // jeśli pod nami nie ma bloku oraz nie jesteśmy podczas skoku...
- isFalling = true; // .. zacznij spadać
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement