1

私はゲームを作るためにsfml2.0を使用しています。背景はスターフィールドになります。画像を使うよりも、ゲームを始めるたびにランダムにスターフィールドを生成するのがいいのではないかと思ったので、背景は毎回少しずつ違って見えます。問題は、私が現在それを行っている方法は、私のゲームをかなり遅くすることです。スピードヒットの原因を誰かが知っていますか?ドキュメントを調べて何を確認しましたが、何も見つかりませんでした...

これが私のコードです:

#include <SFML/Graphics.hpp>
#include "sfml helper/initialization_helpers.h"
#include "sfml helper/cursor_functions.h"
#include "sfml helper/global_event_handler.h"
#include "sfml helper/globals.h"
#include <cstdio>

int main(int argc, char* argv[])
{
    try {
        // some non-related preparations...
        PrepareApplication(argv[0]);
        float width = 640, height = 480;
        sf::RenderWindow window(sf::VideoMode(width, height), "SFML Test", sf::Style::Close);
        window.setFramerateLimit(60);

        // Textures is a global object that has an internal std::map<string, sf::Texture>
        Textures.add("ball.png", "ball");
        sf::Sprite sprite;
        sprite.setTexture(Textures.get("ball"));

        // This is the snippet that generates the starfield
        srand(time(NULL));
        sf::Image starsImg;
        starsImg.create(width, height, sf::Color::Black);
        int numStars = rand() % 20 + 490;
        for (int i = 0; i < numStars; i++) {
            int x = rand() % (int)width;
            int y = rand() % (int)height;
            sf::Color color(255, 255, 255, rand() % 75 + 25);
            starsImg.setPixel(x, y, color);
        }
        sf::Texture starsTexture;
        starsTexture.loadFromImage(starsImg);
        sf::Sprite stars;
        stars.setTexture(starsTexture);

        // main loop
        while (window.isOpen()) {
            if (Flags.isActive && Flags.inFocus) {
                confineCursorToWindow(window);
            } else {
                freeCursor();
            }
            sf::Event event;
            while (window.pollEvent(event)) {
                if (event.type == sf::Event::KeyPressed) {
                    if (event.key.code == sf::Keyboard::Escape) {
                        Flags.isActive = (!Flags.isActive);
                    }
                }
                if (event.type == sf::Event::MouseMoved) {
                    sprite.setPosition(event.mouseMove.x, event.mouseMove.y);
               }
                // handles default events like sf::Event::WindowClosed
                handleDefaultEventsForWindow(event, window);
            }
            window.clear();
            window.draw(stars); // here's where I draw the stars
            window.draw(sprite);
            window.display();
        }
    } catch (const char* error) {
        printf("%s\n", error);
        exit(1);
    }

    return 0;
}

編集

スターフィールドの画像を読み込んで描画してみましたが、ゲームはまだ遅くなります!

また、遅いとは、「スプライト」と呼ばれるスプライトがマウスを追いかけるときに遅れることを意味します。それは実際には速度の問題ですか?

4

0 に答える 0