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