两个小球的动态展示,在窗口中绘制了两个小球。小球的位置和速度会随着时间的推移而改变,当它们触碰到窗口的边界时会反弹!
写C++代码来实现两个小球的动态展示,以下分别介绍了用SFML及cocos2dx来编写。
- #include
- int main() {
- sf::RenderWindow window(sf::VideoMode(800, 600), "Bouncing Balls");
- sf::CircleShape ball1(50);
- ball1.setFillColor(sf::Color::Red);
- sf::Vector2f ball1Pos(100, 100);
- sf::Vector2f ball1Vel(3, 2);
- sf::CircleShape ball2(30);
- ball2.setFillColor(sf::Color::Blue);
- sf::Vector2f ball2Pos(400, 300);
- sf::Vector2f ball2Vel(-2, -3);
- while (window.isOpen()) {
- sf::Event event;
- while (window.pollEvent(event)) {
- if (event.type == sf::Event::Closed)
- window.close();
- }
- ball1Pos += ball1Vel;
- ball2Pos += ball2Vel;
- if (ball1Pos.x < 0 || ball1Pos.x > window.getSize().x)
- ball1Vel.x = -ball1Vel.x;
- if (ball1Pos.y < 0 || ball1Pos.y > window.getSize().y)
- ball1Vel.y = -ball1Vel.y;
- if (ball2Pos.x < 0 || ball2Pos.x > window.getSize().x)
- ball2Vel.x = -ball2Vel.x;
- if (ball2Pos.y < 0 || ball2Pos.y > window.getSize().y)
- ball2Vel.y = -ball2Vel.y;
- window.clear();
- ball1.setPosition(ball1Pos);
- ball2.setPosition(ball2Pos);
- window.draw(ball1);
- window.draw(ball2);
- window.display();
- }
- return 0;
- }
这段代码使用SFML库创建了一个窗口,并在窗口中绘制了两个小球。小球的位置和速度会随着时间的推移而改变,当它们触碰到窗口的边界时会反弹。您可以根据需要调整小球的初始位置、大小和速度。请确保已经安装了SFML库,并将其链接到您的项目中。
- #include "cocos2d.h"
- USING_NS_CC;
- class BallScene : public Scene
- {
- public:
- virtual bool init()
- {
- if (!Scene::init())
- {
- return false;
- }
- Size visibleSize = Director::getInstance()->getVisibleSize();
- Vec2 origin = Director::getInstance()->getVisibleOrigin();
- auto ball1 = Sprite::create("ball_red.png");
- ball1->setPosition(Vec2(visibleSize.width / 4 + origin.x, visibleSize.height / 2 + origin.y));
- addChild(ball1);
- auto ball2 = Sprite::create("ball_blue.png");
- ball2->setPosition(Vec2(visibleSize.width * 3 / 4 + origin.x, visibleSize.height / 2 + origin.y));
- addChild(ball2);
- auto ball1MoveAction = MoveBy::create(2.0f, Vec2(visibleSize.width / 2, 0));
- auto ball1Action = RepeatForever::create(ball1MoveAction);
- ball1->runAction(ball1Action);
- auto ball2MoveAction = MoveBy::create(3.0f, Vec2(-visibleSize.width / 2, 0));
- auto ball2Action = RepeatForever::create(ball2MoveAction);
- ball2->runAction(ball2Action);
- return true;
- }
- CREATE_FUNC(BallScene);
- };
- int main(int argc, char **argv)
- {
- // 初始化游戏引擎
- Application app(argc, argv);
- // 创建导演对象
- Director director = Director::getInstance();
- // 创建场景对象
- Scene *scene = BallScene::create();
- // 运行场景
- director->runWithScene(scene);
- // 开始主循环
- return app.run();
- }
上述代码使用Cocos2d-x游戏引擎创建了一个场景,场景中包含两个小球。每个小球都会以不同的速度水平移动,当它们到达屏幕边缘时会反弹。您可以根据需要调整小球的初始位置、精灵图片以及移动动作的速度和方向。请确保已经配置好Cocos2d-x开发环境,并将代码与相关资源文件(ball_red.png和ball_blue.png)放置在正确的位置。