Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Jan666

Pages: [1] 2
1
Graphics / RenderTexture Canvas Touch Offset Problem
« on: January 12, 2023, 08:51:29 am »
Hello, i try to make a little paint programm on mobilephone. You paint with the finger on a canvas(sf::RenderTexture). But the touch coordinates are not right on the canvas, there is a offset between the touch point and the draw point, i cant find the mistake, someone get an idea? I think there ist something wrong with the mapPixelToCoords between the window and canvas, here is the Code:

int main(int argc, char *argv[])
{
        const int xScreen = 1200;
        const int yScreen = 2600;
        const int borderScreen = 100;
       
        RenderWindow window(VideoMode(xScreen, yScreen), "Hello SFML");

   
 sf::RenderTexture canvas;
canvas.create(1100, 2000);
canvas.clear(sf::Color::White);

sf::Sprite sprite;
 sprite.setTexture(canvas.getTexture());sprite.setPosition(50, 300);   
View view(canvas.getView());
       
        vector<sf::Shape* > shapes;


        while (window.isOpen())
        {
               
                sf::Event event;
                while (window.pollEvent(event));
               
Vector2i touchy =  Touch::getPosition(0, window);
Vector2f touch = window.mapPixelToCoords(touchy);

CircleShape *shape = new CircleShape(10);
shape->setPosition(touch.x, touch.y);
shape->setOrigin(shape->getRadius(), shape->getRadius());
shape->setFillColor(sf::Color::Black);
               

FloatRect canvasRect = sprite.getGlobalBounds();

window.clear(sf::Color(80, 80, 80));
               
               
if(canvasRect.contains(touch)){
        shapes.push_back(shape);
       
               
for(auto it=shapes.begin(); it!=shapes.end();it++) {

canvas.draw(**it);
}

}
canvas.display();

                window.draw(sprite);
               
                window.display();
       
        }
        return 0;
}

 

2
Graphics / Sfml C4Droid
« on: January 08, 2023, 12:03:24 am »
Hello,
i am using for my mobile Phone C4Droid, its an IDE for mobile Phone. exist there some code to hide the screen menu symbols (Android) this ->>    |||   []    <    when i run my code? And exist there also any piece of Code that the Screen not rotate when i rotate my mobile Phone?

3
Graphics / Stop looping when touch is holding
« on: October 12, 2022, 12:59:07 pm »
Hello,
I need to fix following:
I have an animation that play when i Touch a Button. But its looping when i hold the touch on my Button. I dont wanna that, the animation should play once and should not depends how long i hold the touch. I find answers with Keys but i need to  know with Touch functions, there are not many to find in the net.
Here is my code piece:
if(animation == true){
if(animationClock.getElapsedTime().asSeconds() > 0.1)
{
animRec.x ++;
if(animRec.x * 103 >= animationTexture.getSize().x)
animRec.x = 0;

animationClock.restart();
}
}

FloatRect buttonRect = animationSprite.getGlobalBounds();




// the Touch is pressed the button
if(buttonRect.contains(worldPos)){

        animation = true;      
       

}
else
{

if(animRec.x * 412<= animationTexture.getSize().x)
{
        animation = false;     
}
}
 

4
Graphics / Change drawable objects hierarchy ?
« on: October 06, 2022, 12:07:10 am »
So i wanna make a beat em up game, you see the player from the side but you can also walk up an down. So i need to fix following: When the player is on the y axis higher than another object, the player have to be behind it and when the player's y axis is lower than the object , he is in front of it. Exist there something like to change the drawable objects hierarchy while the game i running and compare the y- axis of the booth?

5
Graphics / How animation with touch button
« on: September 22, 2022, 09:40:43 pm »
Hello,
i have a Spritesheet (the animation is in 24 Frames), now it only plays when my finger is on the touch Button (RectangleShape button). But i need to change this, i want that the SpriteSheet animation still plays automaticly one time when i touched the Button, without hold the finger on and without repeating the animation, how can i fix it? Here is the part if the code:


...

//init  Sprite( its a SpriteSheet)
sf::Texture texture;
texture.loadFromFile("test1.png");
sf::Sprite sprite;
sprite.setPosition(300, 500);
sprite.setScale(5, 5);
sprite.setTexture(texture);

//init Button
sf::RectangleShape button;
button.setSize(sf::Vector2f(600, 200));
button.setPosition( sf::Vector2f(500, 1900));
button.setFillColor(sf::Color::Red);

sf::Clock clock;
sf::Vector2f animRect;
       
        while (window.isOpen())
        {                                                      
       
       
                sf::Event event;

//Set Touch Coordinates to Screen
sf::Vector2i pixelPos = sf::Touch::getPosition(0, window);
sf::Vector2f worldPos = window.mapPixelToCoords(pixelPos);


//Set the Rect for the part of the SpriteSheet
sprite.setTextureRect(sf::IntRect (animRect.x * 101, animRect.y * 232, 101, 232));
               
                while (window.pollEvent(event))
                {                                              
                       
                if (event.type == sf::Event::Closed)
                                window.close();
                        }                      
//FloatRect fot the button Sprite              
sf::FloatRect btnRect = button.getGlobalBounds();
               
                //if touch the Button
                if(btnRect.contains(worldPos)){
                       
                        if(clock.getElapsedTime().asSeconds() >= 0.2){
                animRect.x++;
                if(animRect.x * 101 >= texture.getSize().x)
        animRect.x = 0;
           animRect.y = 0;
                clock.restart();
                        }                              
                }                      
 


6
Graphics / Manage different screens with touch button
« on: September 15, 2022, 08:48:47 pm »
Hello, i have a question i follow the Tutorial "manage for different Screens" on github. Now i wanna i build in a RectangleShape (btn1), who will used for a touch button to cgange on another screen, how i can handld this, here is my code:
class screen_1: public cscreen {
       
        public:        
         screen_1(void);        
        virtual int Run(sf::RenderWindow &App);
        void btn(sf::RenderWindow &App);
       
        private:
        sf::RectangleShape btn1;
        sf::FloatRect btn1Rect;
};

screen_1::screen_1(void){
       
        btn1.setSize(sf::Vector2f(500, 100));
        btn1.setPosition(sf::Vector2f(400, 500));
        btn1.setFillColor(sf::Color::Red);
       
}

void screen_1::btn(sf::RenderWindow &App){
       
        sf::Vector2i pixelPos = sf::Touch::getPosition(0, App);
                sf::Vector2f worldPos = App.mapPixelToCoords(pixelPos);
               
                btn1Rect = btn1.getGlobalBounds();
       
        if(btn1Rect.contains(worldPos)){
               
                screen_2::Run(); //dont work :(
               
}

int screen_1::Run(sf::RenderWindow &App){
       
        sf::Event event;        
        bool Running = true;
       
        while (Running) {              
       
        while (App.pollEvent(event))
        {                              
        if (event.type == sf::Event::Closed)                    {                      
                        return (-1);                   
                        }
                       
                               
                               
                               
                        }
        }
        App.clear(sf::Color(25, 200, 30));
        App.draw(btn1);
        App.display();
       
        }
        return (-1);
}



 


7
Graphics / If function for collision not working together
« on: August 15, 2022, 10:23:08 am »
Can someone Tell me why these four if functions not working together and how to fix it?

(playerBounds.intersects(wallBounds)){

if(wallBounds.left < playerBounds.left + playerBounds.width )

player.setPosition(wallBounds.left + wallBounds.width, playerBounds.top);


 if(playerBounds.left < wallBounds.left)

  player.setPosition(wallBounds.left - playerBounds.width, playerBounds.top);

if(wallBounds.top < playerBounds.top + playerBounds.height )

player.setPosition(playerBounds.left,  wallBounds.top + wallBounds.height);


 if(playerBounds.top < wallBounds.top)

  player.setPosition(playerBounds.left  , wallBounds.top - playerBounds.height);
   
}
 

8
Graphics / Collision Opposite Side
« on: August 09, 2022, 12:26:15 am »
Hey,
I have a question, the collision  between playerBounds and WallBounds works very good, but on the opposite Side not,  can somebody Tell me why?
 if(playerBounds.intersects(wallBounds)){
                       
        // Left Collision
 if (playerBounds.left < wallBounds.left + wallBounds.width && playerBounds.left + playerBounds.width > wallBounds.left)
         {
         
          player.setPosition(playerBounds.left, wallBounds.top - playerBounds.height);
          }
         
 
          // Boton Collision not working yet
 if( playerBounds.left >wallBounds.left + wallBounds.width && playerBounds.left + playerBounds.width > wallBounds.left)
          {
               
                player.setPosition(playerBounds.left, wallBounds.top - wallBounds.height);
            }  

 

9
Graphics / Erase only one rectangleShape
« on: July 21, 2022, 09:35:28 am »
Hi,
I have a player and when he intersects with the door, the door should erase, but the player still erase all doors, how can i fix it that he only erase the door he intersects, here is my code:
RectangleShape door;
std::vector<RectangleShape> doors(3u);

....

 (auto& door: doors){
 FloatRect playerBounds = player.getGlobalBounds();
 FloatRect doorBounds =  door.getGlobalBounds();
       
          for(int i = 0; i < doors.size(); i++){
       
         if(doorBounds.intersects(playerBounds)){
               
                doors.erase(doors.begin(), doors.end());
               
         }
 }     
       
 window.draw(doors[1]);
 window.draw(doors[2]);
       
       
 }

 

10
Graphics / Collision dont work exactly
« on: July 18, 2022, 12:33:45 pm »
Hello,
I have a collision question, the following code works, but when the player come the wall closer, the wall attracts the player like a magnet, can someone tell me how to fix it?

for (auto& wall : walls){
       
        FloatRect wallBounds = wall.getGlobalBounds();
        FloatRect playerBounds = player.getGlobalBounds();
       
nextPos = playerBounds;
nextPos.left += Vec.x ;
nextPos.top += Vec.y;
       
        if(wallBounds.intersects(nextPos)){
                       
        //Bottom Collision
 if (Vec.y > 0 && playerBounds.left < wallBounds.left + wallBounds.width && playerBounds.left + playerBounds.width > wallBounds.left )
         {
        Vec.y = 0;
          player.setPosition(playerBounds.left, wallBounds.top - playerBounds.height);
          }
        //Top Collision
if(Vec.y < 0 && playerBounds.left < wallBounds.left + wallBounds.width && playerBounds.left + playerBounds.width > wallBounds.left)
          {
                Vec.y = 0;
                player.setPosition(playerBounds.left, wallBounds.top + wallBounds.height);
            }  
 //Right Collision
if(Vec.x > 0 && playerBounds.top < wallBounds.top + wallBounds.height && playerBounds.top + playerBounds.height > wallBounds.top)
                   {
                  Vec.x = 0;
                 player.setPosition(wallBounds.left - playerBounds.width, playerBounds.top);
                   }
//Left Collision
if (Vec.x < 0 && playerBounds.top < wallBounds.top + wallBounds.height && playerBounds.top + playerBounds.height > wallBounds.top)
                      {
                      Vec.x = 0;
player.setPosition(wallBounds.left + wallBounds.width , playerBounds.top);

                      }
           
      }
 

11
Graphics / Collision with multiple RectangleShapes
« on: July 17, 2022, 12:17:10 pm »
Hello, i have a question, i have made multiple RectangleShapes
with following code:
RectangleShape* wall = new RectangleShape;
FloatRect wallRect = wall->getGlobalBounds();

std::vector<RectangleShape> walls;
walls.push_back(*wall);

...

for(int i = 0; i < walls.size(); i++){
       
        walls[i].setPosition(Vector2f(300, 2000));
     
     walls[i].setSize(Vector2f(50, 300));
        walls[1].setPosition(Vector2f(300, 800));
        walls[1].setFillColor(Color::Blue);
        walls[1].setSize(Vector2f(500, 100));
        walls[2].setPosition(Vector2f(900, 500));
        walls[2].setFillColor(Color::Yellow);
        window.draw(walls[i]);

 

How i can do the collision detection, i have
a simple RectangleShape for the Player, it doesnt work when i give both a FloatRect + getGlobslsBounds and intersects them, someone know?


12
Graphics / Touch joystick border radius
« on: June 18, 2022, 12:37:12 pm »
Hello,
I wanna create a touch controller, a small circle i can move around with a finger inside a bigger circle. But i have no idea, how i set a  border radius, that the smaller circle still movable just inside it, any help?

13
Graphics / floatrect move with a Sprite?
« on: June 14, 2022, 11:57:12 am »
Hello,
I have following problem:
I have an enemySprite who has a floatrect, a hitbox for the Player, that reduce his health when he collide with. But when the enemy move this floatrect stand still, any idea how to "parenting" this floatrect to the enemySprite when moves?

14
Graphics / HITBOX FloatRect
« on: June 10, 2022, 09:27:14 am »
Hello, i need a Hitbox for my player that is smaller than the Player Sprite Rect. I read that the FloatRect can do it, but theres is no getglbslBounds for it, can someonr give me an advise, how i can use a floatrect with globalbounds for my player sprite?

15
Graphics / Bullets turn direction failure
« on: May 30, 2022, 10:44:57 am »
Hello, i have a bullet direction Problem. I want that my Player can shot bullets to the right and left direction. I used this piece of code for that (I used setScale for flip the Players Direction):
bulletVec[i].bltFire(0, 2 * plr.plrSprite.getScale().x);
 
The Problem noq is that the firing Bullets always turning the direction when i turn the players direction, how i can change this?

Pages: [1] 2