Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal

Ответ
 
Опции темы
Старый 12.11.2011, 13:45   #61
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

//
if (x=unit1x) and (y=unit1ythen //если коорд. курсора совпадают с коорд. юнита,то...
         
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
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

А, всё. Ввёл еще условие.
(Offline)
 
Ответить с цитированием
Старый 12.11.2011, 14:21   #63
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 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=unit1ythen //если коорд. курсора совпадают с коорд. юнита,то... 
         
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
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

"видиш ли, если не указаны begin и end, то выполняется одна, следующая команда."

В принципе, можно было сказать только это, я понял =)
(Offline)
 
Ответить с цитированием
Старый 12.11.2011, 15:10   #65
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Ответ: Помогите исправить ошибку

и еще одна мелочь. если твой курсор перемещается с шагом, меньше размеров спрайта, или нужно проверить простейшее столкновение произвольно шатающихся по экрану спрайтов по их размеру (одинаковому у обоих), то можно использовать примерно такие функции:

// находится ли точка внутри прямоугольника?
// функция возвращает истину, если точка (pX, pY)
// в пределах прямоугольника (rX, rY, sW, sH), где
// (rX, rY) - левый верхний угол прямоугольника,
// (sW, sH) - его ширина и высота (размеры спрайта)
function PtInRect(pXpYrXrYInteger): boolean;
begin
    
if (pX >= rX)and(pY >= rY)and(pX rX sW)and(pY rY sHthen
        PtInRect 
:= true
    
else
        
PtInRect := false;
end;

// пересекаются ли прямоугольники?
// размеры обоих прямоугольников равны размерам спрайта (sW, sH)
// на входе - координаты левых верхних углов наших прямоугольников
function RCollision(rX1rY1rX2rY2Integer): boolean;
begin
    RCollision 
:= PtInRect(rX1rY1rX2rY2)
        or 
PtInRect(rX1 sWrY1rX2rY2)
        or 
PtInRect(rX1 sWrY1 sHrX2rY2)
        or 
PtInRect(rX1rY1 sHrX2rY2);
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
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

хм... Пока мне это не нужно, но всё равно благодарю. Наверное, пригодится.
(Offline)
 
Ответить с цитированием
Старый 12.11.2011, 17:43   #67
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

А вот смотрите:

if (x=unit1x) and (y=unit1y) and (key KE_KEY5then //если курсор на юните и кликнута "5"...
    
begin
         condOnBar
:='Выбран'//меняем состояние на баре
         
if (key KE_KEY5then //если была снова кликнута "5"...
            
begin
               unit1x
:=x//перемещение юнита 
               
unit1y:=y//на положение курсора
            
end;         
    
end
Ну, если кликаем по юниту, его состояние меняется на "выбран", если кликаем еще раз, он перемещается на место, где курсор (как в Ancient Empires).

Состояние меняется, а юнит не перемещается. В чем дело?
(Offline)
 
Ответить с цитированием
Старый 12.11.2011, 17:58   #68
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: Помогите исправить ошибку

Потому что ты огромный лентяй, который ленится почитать что-нибудь по основам программирования и паразитирует на добрых форумчанах, которые разжёвывают тебе каждую мелочь вместо того, чтоб послать куда подальше. Ты допускаешь найглупейшие ошибки. Ты отнимаешь кучу времени у barsunduk и PassCall, сам не удосужившись приложить минимум усилий и почитать встроенную справку и какую-нибудь статью. Я следил за темой с самого начала и всё время сдерживался.
Представь себе, что ты нанял репетитора по алгебре, ничего не учишь, спрашиваешь, сколько будет 2+3 после того, как он объяснил тебе сколько будет 2+2. А после того, как он ответил, ты спрашиваешь, сколько будет 2+4. Научись прибавлять сам! Мало того, в итоге ты отказываешься платить репетитору. Ты делаешь абсолютно тоже самое.
Я закончил.
(Offline)
 
Ответить с цитированием
Старый 12.11.2011, 19:20   #69
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

baton4ik, извините, больше не буду.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:03.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com