Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2015, 22:58   #1
Diamond15
 
Регистрация: 30.04.2015
Сообщений: 4
Вопрос Почему в Debug Rectangle есть, а в релизе - нет?

Помогите, пожалуйста )
Следующая ситуация:
Есть игра, Delphi XE5, целевые платформы Win32/Android/IOs.
Запускается. Появляется TabControl первым Tab - логотип, таймер на Fade-out, появляется меню. Три кнопки - новая, состязание, поделиться.
Новая - меняется Tab. В нем меню Toolbar с двумя кнопками, остальное место Rectangle Field1. В нем динамически создается array of rectangle (parent:=field1), рассчитываются координаты и все такое.
Теперь вопрос: в режиме Debug все работает отлично, а в режиме Release- Field1 грузится (проверил изменением цвета), а массив прямоугольников нет. Как так? Release для Win32. На Android залил Debug-версию, та же ситуация - не грузятся Rectangle. Через Google Store даже не пробовал.


Несущественное поудалял, влияния не имеет на это. Также создания TRectangle переносил в FieldCalculate, без разницы.Грешил на Onmousedown - может, из-за андройда как одной из целевых Mouse не прокатит, но закомментировал - не помогло. Вообщем, помогите кто может

Менял строку Parent:=Field1; на Parent:=GameAndroid;
Рисуется данное поле с самого начала игры, поверх логотипа, меню и прочего. Но суть не в этом...
Рисуется только в режиме дебага. Если переключить в релиз, то опять ничего, как на второй картинке. Чего за мистика? о_О
Изображения
Тип файла: jpg 1.jpg (39.7 Кб, 90 просмотров)
Тип файла: jpg 2.jpg (17.5 Кб, 89 просмотров)
Diamond15 вне форума Ответить с цитированием
Старый 30.04.2015, 22:59   #2
Diamond15
 
Регистрация: 30.04.2015
Сообщений: 4
Сообщение

Код:
procedure TGameAndroid.FieldCalculate;
var i,a,j:shortint ;
   CorectInt,x,y,border:integer;
begin
 sWidth:=0;
 sHeight:=0;
 border:=5;                                        //расстояние между клетками
 sWidth:=Trunc((Field1.Width-(max+1)*border)/max); //ширина клетки
 sHeight:=Trunc((Field1.Height-(max+1)*border)/max); //высота клетки
 CorectInt:=Trunc((Field1.Height-max*sHeight-(max+1)*border)/2);   // вычисляем середину Филд1. Отступ сверху и снизу будет равный.
 x:=-sWidth;                  //начинаем за экраном. В первой итерации увеличиваем до начала экрана.
  for i :=1 to max do
   for j := 1 to max do
     begin
      with RectPole[i,j] do
       begin
        Parent:=Field1;       //родитель
        Height:=sHeight;
        Width :=sWidth;
        Inc(x,sWidth+border);  //увеличиваем х на ширину клетки+расстояние
         if x+border<GameAndroid.ClientWidth then //размещаем вдоль одной линии
          begin
           Position.X:=x;
           Position.Y:=y+CorectInt+border;    //увеличиваем на высоту+расстояние+середину экрана
          end
         else
          begin   //новый ряд фигур
           x:=border;
           Position.X:=x;
           inc(y,sHeight+border);
           Position.Y:=y+CorectInt+border;
          end;
        end;
     end;
end;
Наткнулся на форуме vc++ на след.вещь

Цитата:
А связано это с тем, что компилятор VC++ считает себя слишком умным и в Debug версии неявно инициализирует объявленные переменные. Сейчас не вспомню как именно, но думаю все видели в отладчике указатели типа 0xcccccccc или другие "говорящие" значения.
Ну так вот, а в Release, в целях оптимизации, никакой такой неявной инициализации не происходит.
Причем это происходит не только с указателями, но и со скалярными типами. Кажется, они (int, double, etc.) по умолчанию инициализируются нулем.
Может поможет...

Решил проблему. Собственно, про не инициализированные переменные: обнулил в Procedure FieldCalculate, сделал y:=0 перед дальнейшим использованием.

Последний раз редактировалось Аватар; 02.05.2015 в 16:43.
Diamond15 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Rectangle::~Rectangle(void)" (??1Rectangle@@QAE Dimka-novitsek Общие вопросы C/C++ 4 15.10.2014 13:34
Перенос БД при релизе Salem23 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 9 14.09.2014 17:29
Почему-то нет звука fevgin Паскаль, Turbo Pascal, PascalABC.NET 13 17.11.2013 20:05
класс Rectangle совпадает с функцией Rectangle sofen.ru Общие вопросы C/C++ 5 06.11.2010 14:32