|
12.11.2011, 13:45
|
#61
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
// if (x=unit1x) and (y=unit1y) then //если коорд. курсора совпадают с коорд. юнита,то... begin facewindow:=loadImage('/face1.png'); //загружаем рожу юнита(будет отображаться на нижнем баре) nameOnBar:='О Р К'; //присваиваем имя юнита, которое будет около рожи end else //иначе (это когда курсор не на юнете, а на земле) nameOnBar:='З Е М Л Я'; //присваиваем другое имя facewindow:=loadImage('/land1face.png'); // и загружаем другую картинку drawImage(facewindow,scrW-sW-3,scrH-SH-3); //размещаем ее на баре SetColor(180,250,0); DrawText(nameOnBar,scrW-getStringWidth(nameOnBar)-35,scrH-getStringHeight(nameOnBar)-4); //и текст
Проблема в том, что если строка
"nameOnBar:='З Е М Л Я'; //присваиваем другое имя"
ставится выше
"facewindow:=loadImage('/land1face.png'); // и загружаем другую картинку",
то выполняется только верхняя строка. Если же поменять их местами, будет опять же выполняться та, которая выше. Как сделать так, чтобы выполнялись сразу обе?
|
(Offline)
|
|
12.11.2011, 14:18
|
#62
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
А, всё. Ввёл еще условие.
|
(Offline)
|
|
12.11.2011, 14:21
|
#63
|
Разработчик
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений (для 319 пользователей)
|
Ответ: Помогите исправить ошибку
Было бы хорошо иметь весь код, а то я смутно понимаю предназначение кода.
Но в общем я догадываюсь о сути ошибки
end else //иначе (это когда курсор не на юнете, а на земле) nameOnBar:='З Е М Л Я'; //присваиваем другое имя facewindow:=loadImage('/land1face.png'); // и загружаем другую картинку
объясняю:
видиш ли, если не указаны begin и end, то выполняется одна, следующая команда. Давай разберем пошагово
if (x=unit1x) and (y=unit1y) then
Если в выделенной клетке монстр, то...
begin
facewindow:=loadImage('/face1.png'); //загружаем рожу юнита(будет отображаться на нижнем баре)
nameOnBar:='О Р К'; //присваиваем имя юнита, которое будет около рожи
end;
Загружаем в память иконку орка (и причем это сделано очень неправильным образом, иконки следует загрузить заранее), и меняем текст на "орк"
else //иначе (это когда курсор не на юнете, а на земле)
nameOnBar:='З Е М Л Я'; //присваиваем другое имя
Иначе делаем текст "земля"
так как сдесь нет begin и end, выполнятсмя будет только nameOnBar:='З Е М Л Я'; Все, условие закончилось.
facewindow:=loadImage('/land1face.png'); // и загружаем другую картинку
А вот эта штука будет выполняться в ЛЮБОМ случае, так как не относиться к условию. Тоесть даже если в клетке стоит орк, и мы загрузим его иконку, то вот эта команда загрузит землю.
Правильно будет так:
if (x=unit1x) and (y=unit1y) then //если коорд. курсора совпадают с коорд. юнита,то... begin facewindow:=loadImage('/face1.png'); //загружаем рожу юнита(будет отображаться на нижнем баре) nameOnBar:='О Р К'; //присваиваем имя юнита, которое будет около рожи end else begin //иначе (это когда курсор не на юнете, а на земле) nameOnBar:='З Е М Л Я'; //присваиваем другое имя facewindow:=loadImage('/land1face.png'); // и загружаем другую картинку end; drawImage(facewindow,scrW-sW-3,scrH-SH-3); //размещаем ее на баре SetColor(180,250,0); DrawText(nameOnBar,scrW-getStringWidth(nameOnBar)-35,scrH-getStringHeight(nameOnBar)-4); //и текст
__________________
Мечта программиста: запрограммировать процесс программирования.
Всё гениальное - просто.
http://passcall.ucoz.com
|
(Offline)
|
|
12.11.2011, 14:43
|
#64
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
"видиш ли, если не указаны begin и end, то выполняется одна, следующая команда."
В принципе, можно было сказать только это, я понял =)
|
(Offline)
|
|
12.11.2011, 15:10
|
#65
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: Помогите исправить ошибку
и еще одна мелочь. если твой курсор перемещается с шагом, меньше размеров спрайта, или нужно проверить простейшее столкновение произвольно шатающихся по экрану спрайтов по их размеру (одинаковому у обоих), то можно использовать примерно такие функции:
// находится ли точка внутри прямоугольника? // функция возвращает истину, если точка (pX, pY) // в пределах прямоугольника (rX, rY, sW, sH), где // (rX, rY) - левый верхний угол прямоугольника, // (sW, sH) - его ширина и высота (размеры спрайта) function PtInRect(pX, pY, rX, rY: Integer): boolean; begin if (pX >= rX)and(pY >= rY)and(pX < rX + sW)and(pY < rY + sH) then PtInRect := true else PtInRect := false; end; // пересекаются ли прямоугольники? // размеры обоих прямоугольников равны размерам спрайта (sW, sH) // на входе - координаты левых верхних углов наших прямоугольников function RCollision(rX1, rY1, rX2, rY2: Integer): boolean; begin RCollision := PtInRect(rX1, rY1, rX2, rY2) or PtInRect(rX1 + sW, rY1, rX2, rY2) or PtInRect(rX1 + sW, rY1 + sH, rX2, rY2) or PtInRect(rX1, rY1 + sH, rX2, rY2); end;
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
Последний раз редактировалось barsunduk, 12.11.2011 в 17:39.
Причина: OR вместо AND! запарился...
|
(Offline)
|
|
12.11.2011, 15:59
|
#66
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
хм... Пока мне это не нужно, но всё равно благодарю. Наверное, пригодится.
|
(Offline)
|
|
12.11.2011, 17:43
|
#67
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
А вот смотрите:
if (x=unit1x) and (y=unit1y) and (key = KE_KEY5) then //если курсор на юните и кликнута "5"... begin condOnBar:='Выбран'; //меняем состояние на баре if (key = KE_KEY5) then //если была снова кликнута "5"... begin unit1x:=x; //перемещение юнита unit1y:=y; //на положение курсора end; end;
Ну, если кликаем по юниту, его состояние меняется на "выбран", если кликаем еще раз, он перемещается на место, где курсор (как в Ancient Empires).
Состояние меняется, а юнит не перемещается. В чем дело?
|
(Offline)
|
|
12.11.2011, 17:58
|
#68
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Афула
Сообщений: 1,700
Написано 658 полезных сообщений (для 1,963 пользователей)
|
Ответ: Помогите исправить ошибку
Потому что ты огромный лентяй, который ленится почитать что-нибудь по основам программирования и паразитирует на добрых форумчанах, которые разжёвывают тебе каждую мелочь вместо того, чтоб послать куда подальше. Ты допускаешь найглупейшие ошибки. Ты отнимаешь кучу времени у barsunduk и PassCall, сам не удосужившись приложить минимум усилий и почитать встроенную справку и какую-нибудь статью. Я следил за темой с самого начала и всё время сдерживался.
Представь себе, что ты нанял репетитора по алгебре, ничего не учишь, спрашиваешь, сколько будет 2+3 после того, как он объяснил тебе сколько будет 2+2. А после того, как он ответил, ты спрашиваешь, сколько будет 2+4. Научись прибавлять сам! Мало того, в итоге ты отказываешься платить репетитору. Ты делаешь абсолютно тоже самое.
Я закончил.
__________________
kali surgeon
|
(Offline)
|
|
12.11.2011, 19:20
|
#69
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
baton4ik, извините, больше не буду.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:33.
|