Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Delphi 7. Если виден 1-й то будет не виден 145-й имейдж, если 2-й то 146-й и так до 288.

宇宙の外から Профи (530), на голосовании 7 лет назад
В общем делаю простую игрушку.
И не говорите зачем)))
Просто как сделать так чтобы когда виден 1-й имейдж, то будет не виден 145-й имейдж, если 2-й то 146-й и так до 288. Не писав что то типа
if image1.visible=true then image144.visible:=false;
image1.visible:=not(image144.visible);
image1.visible=image144.visible=false;

Так как это ооочень долго.
Я пытался использовать формулу, проверял на кнопках

var
o,i:integer;
begin
for o := 1 to 4 do
for i := 5 to 8 do
if tbutton(FindComponent('Button' + IntToStr(o))).visible=true then
tbutton(FindComponent('Button' + IntToStr(i))).visible:=false else
if tbutton(FindComponent('Button' + IntToStr(i))).visible=true then
tbutton(FindComponent('Button' + IntToStr(o))).visible:=false;
но робит вообще не так как надо, так как если хоть одна кнпока от 1-й до 4 видан то все от 5 до 8 станут невидимы.
Голосование за лучший ответ
RED Искусственный Интеллект (313825) 7 лет назад
Эмм. Прямолинейный подход не всегда оправдан.
В современных играх делают загрузку огромного изображения с тайлами текстур.
Потом карта их очень быстро "выбивает" по необходимости.
Если памяти хватает примени похожий подход.
Капитан Гугл Искусственный Интеллект (146199) 7 лет назад
FindComponent работает относительно долго.
Если нужно создать очень много кнопок - делай их динамическими, массивом. А еще лучше - делай их не кнопками, а одной картинкой, и отслеживай координаты нажатия.
Ну и
for i:=1 to 144 do
(чего-то там от (i+144)).Visible:= not (чего-то там от i).Visible;
"чего-то там" - думай сам, как тебе лучше, через FindComponent, массивом или еще как.
Похожие вопросы