【发布时间】:2018-02-05 03:40:16
【问题描述】:
#include<SFML/Window.hpp>
#include<SFML/Graphics.hpp>
#include<cstdint>
#include<iostream>
const int width = 500;
const int height = 500;
int main(){
sf::RenderWindow window(sf::VideoMode(width, height), "Window", sf::Style::Close);
window.setVerticalSyncEnabled(true);
sf::Event event;
uint8_t *pixels = new uint8_t[height *width *4];
for(int i = 0; i < height * width; i+= 4){
pixels[i] = 00; //r
pixels[i + 1] = 00;//g
pixels[i + 2] = 00;//b
pixels[i + 3] = 255;//a
}
sf::Texture texture;
texture.create(width, height);
sf::Sprite sprite;
while(window.isOpen()){
while(window.pollEvent(event)){
if(event.type == sf::Event::Closed){
window.close();
}
}
window.clear(sf::Color::White);
texture.update(pixels);
sprite.setTexture(texture);
window.draw(sprite);
window.display();
}
delete pixels;
return 0;
}
我不明白为什么实际上只绘制了窗口的一部分。由于程序非常小,我通常会猜测问题是通过切换高度和宽度变量造成的,但这里不是这种情况,因为两者是相等的。
SFML 文档说如果我没有明确地将纹理的大小放在sprite.setTexture() 中,它将默认为纹理的大小。
为什么会出现这种奇怪的行为?我错过了什么吗?
【问题讨论】: