Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием