2015-05-19 6 views
-1

код здесь: https://gist.github.com/protectivetoast83/25301772cbc6f13e6e07Проблемы с отображением изображения в C++ с SDL

изображения проблемы

enter image description here

enter image description here

enter image description here

Программа должна быть отображающие один серый прямоугольник координаты 32, 32 в окне, однако это также было d играя вторую в координате 0,0.

Я добавил cout заявление в строке 60 игры World.cpp, и программа начала работать правильно. Программа работает правильно только до тех пор, пока у меня есть сообщение cout.

Что происходит и как я могу это исправить?

+1

[MCVE] (http://stackoverflow.com/help/mcve) идет в вопросе. – genpfault

ответ

0

Line 57 из gameWorld.cpp выглядит подозрительно:

if(objSet[i].checkActive()); 

Это точка с запятой заканчивается, если заявление («если объект я активен, не делать ничего»), а последующие четыре строки голое внутренний блок, всегда выполняется. (Это объясняет, почему на втором скриншоте вы перебираете все объекты с i=0 до 99, как показано в текстовом поле в правом нижнем углу. Это не говорит мне, почему добавление строки 60 изменяет поведение вашего кода, хотя .)

+0

Ницца! Кажется, это исправить. Благодаря! Но да, по-прежнему не имеет смысла, почему эта проблема происходит в первую очередь. – cafemolecular

+0

@cafemolecular Ehm, да, да? Или вы имеете в виду, что добавление строки 60, фиксирующей проблему, не имеет смысла? Это может быть связано с тем, что компилятор оптимизирует код по-разному, когда у вас есть std :: cout-statement. Вы пробовали строить с разными настройками, '-g',' -O0', '-O1',' -O2' и т. Д.? Вы пробовали отлаживать его, чтобы узнать, что происходит? – gurka

+0

@gurka Оптимизация компилятора звучит как правильный ответ здесь, так как 'cout' заставляет тело цикла запускаться для каждого объекта в' objSet'. –

Смежные вопросы