• 两个小球的动态展示,在窗口中绘制了两个小球。小球的位置和速度会随着时间的推移而改变,当它们触碰到窗口的边界时会反弹


    两个小球的动态展示,在窗口中绘制了两个小球。小球的位置和速度会随着时间的推移而改变,当它们触碰到窗口的边界时会反弹!

    写C++代码来实现两个小球的动态展示,以下分别介绍了用SFML及cocos2dx来编写。

    1.以下是一个简单的示例代码,使用了SFML库来创建窗口并绘制小球的动画效果:

    1. #include
    2. int main() {
    3. sf::RenderWindow window(sf::VideoMode(800, 600), "Bouncing Balls");
    4. sf::CircleShape ball1(50);
    5. ball1.setFillColor(sf::Color::Red);
    6. sf::Vector2f ball1Pos(100, 100);
    7. sf::Vector2f ball1Vel(3, 2);
    8. sf::CircleShape ball2(30);
    9. ball2.setFillColor(sf::Color::Blue);
    10. sf::Vector2f ball2Pos(400, 300);
    11. sf::Vector2f ball2Vel(-2, -3);
    12. while (window.isOpen()) {
    13. sf::Event event;
    14. while (window.pollEvent(event)) {
    15. if (event.type == sf::Event::Closed)
    16. window.close();
    17. }
    18. ball1Pos += ball1Vel;
    19. ball2Pos += ball2Vel;
    20. if (ball1Pos.x < 0 || ball1Pos.x > window.getSize().x)
    21. ball1Vel.x = -ball1Vel.x;
    22. if (ball1Pos.y < 0 || ball1Pos.y > window.getSize().y)
    23. ball1Vel.y = -ball1Vel.y;
    24. if (ball2Pos.x < 0 || ball2Pos.x > window.getSize().x)
    25. ball2Vel.x = -ball2Vel.x;
    26. if (ball2Pos.y < 0 || ball2Pos.y > window.getSize().y)
    27. ball2Vel.y = -ball2Vel.y;
    28. window.clear();
    29. ball1.setPosition(ball1Pos);
    30. ball2.setPosition(ball2Pos);
    31. window.draw(ball1);
    32. window.draw(ball2);
    33. window.display();
    34. }
    35. return 0;
    36. }

    这段代码使用SFML库创建了一个窗口,并在窗口中绘制了两个小球。小球的位置和速度会随着时间的推移而改变,当它们触碰到窗口的边界时会反弹。您可以根据需要调整小球的初始位置、大小和速度。请确保已经安装了SFML库,并将其链接到您的项目中。

    2.使用Cocos2d-x编写动态展示两个小球的功能,可以使用C++语言。以下是一个简单的示例代码:

    1. #include "cocos2d.h"
    2. USING_NS_CC;
    3. class BallScene : public Scene
    4. {
    5. public:
    6. virtual bool init()
    7. {
    8. if (!Scene::init())
    9. {
    10. return false;
    11. }
    12. Size visibleSize = Director::getInstance()->getVisibleSize();
    13. Vec2 origin = Director::getInstance()->getVisibleOrigin();
    14. auto ball1 = Sprite::create("ball_red.png");
    15. ball1->setPosition(Vec2(visibleSize.width / 4 + origin.x, visibleSize.height / 2 + origin.y));
    16. addChild(ball1);
    17. auto ball2 = Sprite::create("ball_blue.png");
    18. ball2->setPosition(Vec2(visibleSize.width * 3 / 4 + origin.x, visibleSize.height / 2 + origin.y));
    19. addChild(ball2);
    20. auto ball1MoveAction = MoveBy::create(2.0f, Vec2(visibleSize.width / 2, 0));
    21. auto ball1Action = RepeatForever::create(ball1MoveAction);
    22. ball1->runAction(ball1Action);
    23. auto ball2MoveAction = MoveBy::create(3.0f, Vec2(-visibleSize.width / 2, 0));
    24. auto ball2Action = RepeatForever::create(ball2MoveAction);
    25. ball2->runAction(ball2Action);
    26. return true;
    27. }
    28. CREATE_FUNC(BallScene);
    29. };
    30. int main(int argc, char **argv)
    31. {
    32. // 初始化游戏引擎
    33. Application app(argc, argv);
    34. // 创建导演对象
    35. Director director = Director::getInstance();
    36. // 创建场景对象
    37. Scene *scene = BallScene::create();
    38. // 运行场景
    39. director->runWithScene(scene);
    40. // 开始主循环
    41. return app.run();
    42. }

    上述代码使用Cocos2d-x游戏引擎创建了一个场景,场景中包含两个小球。每个小球都会以不同的速度水平移动,当它们到达屏幕边缘时会反弹。您可以根据需要调整小球的初始位置、精灵图片以及移动动作的速度和方向。请确保已经配置好Cocos2d-x开发环境,并将代码与相关资源文件(ball_red.png和ball_blue.png)放置在正确的位置。

  • 相关阅读:
    【Nuget】程序包源
    带你深入了解Fragment懒加载
    算法设计与分析之动态规划(1)
    Java Web应用开发简介
    【NetCore】依赖注入的一些理解与分享
    D9741——用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。低电压输入时误操作保护电路, 定时闩锁、短路保护电路等功能
    Do you want them to be removed from the project too?
    关于idea2020.2创建springboot项目maven仓库和jdk版本不匹配大坑
    MySQL的默认引擎为什么是InnoDB
    任务和特权级保护
  • 原文地址:https://blog.csdn.net/airen3339/article/details/133924686