Задача на Borland C++ Builder
Я, на канве формы рисую с помощью Draw()две фигуры
(шара),которые мне затем нужно будет двигать мышкой.Так вот как мне узнать какую фигуру я хочу двигать т.е. куда я навел курсор?
Объясните пожалста!!
Можно и на Borland Delphi.
В общих чертах,смысл такой:
Я, на канве формы рисую с помощью Draw()две фигуры
(шара),которые мне затем нужно будет двигать мышкой.Так вот как мне узнать какую фигуру я хочу двигать т.е. куда я навел курсор?
Объясните пожалста!!
Можно и на Borland Delphi.
например так: когда ты рисуешь фигуры, ты указываешь их координаты. так вот эти координаты надо сохранить, а затем, при обработке, скажем нажатия мыши, брать координаты курсора мыши, брать сохраненные координаты фигур и сравнивать, не попадают ли текущие координаты мыши в пределы одной из фигур.
координатами фигуры является только один пиксел
и это будет довольно долго щелкать мышкой по фигуре в поисках его.Поэтому я хотел задать условие такого вида:
if (xy1.x-5<X<xy1.x+5 && xy1.y-5<Y<xy1.y+5)
{
//moving object
}
где X,Y-координаты курсора;xy1-координаты первой фигуры(центр шарика).как бы раздвинув границы.
Но никакого толка!
Можно ли так делать?
И если да то в чем может быть моя ошибка?
Какое другое может быть решение?
ну для шарика так просто не вычислишь. насколько я помню свои опыты с билдером, координаты окружности определяются координатами прямоугольника, в которого данная окружность вписана. плясать надо от этого.
Если фигура простая то есть функции позволяющие определить в границах фигуры или нет находится точка. Точно название не помню - давно просто этим не занимался.
Эти задачи решаются достаточно часто - так что информацию найти можно. Мне в частности попадалось это в книге "Програмирование Windows98. Том 2" - там подробно рассматриваются алгоритмы нахождения положения точки, границ и т.д. "Программирование графики под Виндоус" - автора уже не помню - в инете есть. Так же много инфы можно найти на сайтах по программированию игр - для этих задач - это стандарт.
Что бы определить площадь за которую ты можешь двигать тебе надо иметь и проверять 3 параметра, например:
}
Где Left и Top Соответственно крайне левое и крайне верхнее значение. Но при этом не забывай учитывать что часть точек будет лежать за пределами круга.
Кстати, рисование фигур - это обязательное условие - или можно использовать уже готовые билдеровские?
По ходу решения, задача определять координаты отпала сама собой :)
у меня имеется примерно такой код:
{
if (xy?.x!=0)
{
Canvas->MoveTo(xy1.x,xy1.y);
Canvas->LineTo(xy?.x,xy?.y);
}
}
как мне сделать так чтобы в места где стоят вопросы
добавлялось значение i?
еще один вопросик:
у меня имеется примерно такой код:
{
if (xy?.x!=0)
{
Canvas->MoveTo(xy1.x,xy1.y);
Canvas->LineTo(xy?.x,xy?.y);
}
}
как мне сделать так чтобы в места где стоят вопросы
добавлялось значение i?
а никак :)
еще один вопросик:
у меня имеется примерно такой код:
{
if (xy?.x!=0)
{
Canvas->MoveTo(xy1.x,xy1.y);
Canvas->LineTo(xy?.x,xy?.y);
}
}
как мне сделать так чтобы в места где стоят вопросы
добавлялось значение i?
тебе надо создать массив xy, тогда
{
if (xy.x!=0)
{
Canvas->MoveTo(xy1.x,xy1.y);
Canvas->LineTo(xy.x,xy.y);
}
}