Вход

Просмотр полной версии : Нажать две кнопки и между ними нарисовать прямую


Lidia
31.03.2008, 02:32
Добрый вечер.
Помогите решить следующую проблему.
Имеется фон-картинка "пирамида". Ученик должен провести высоту. Как я понимаю, во флэш можно организовать это дело таким образом, что если нажаты две точки-кнопки (вершина и точка в середине основания), то пускай проводится линия.
Вопрос: как такое реализовать. Ссылка на детальное руководство и коды приветствуются. :rolleyes:

Заранее спасибо,
Лидия:victory:

Mr. Fixit
31.03.2008, 04:03
// *** variables
var firstClicked : Boolean = false;

var line_mc : MovieClip = this.createEmptyMovieClip('line', 0);
line_mc.lineStyle(1);

// *** methods
function checkPos() : Void {
if(!firstClicked) {
standOnFirstPoint();
firstClicked = true;
}
else standOnSecondPoint();

delete this.onPress;
}

function standOnFirstPoint() : Void {
line_mc.moveTo(_root._xmouse, _root._ymouse);
}

function standOnSecondPoint() : Void {
line_mc.lineTo(_root._xmouse, _root._ymouse);
}

// *** events
top_btn.onPress = checkPos;
bottom_btn.onPress = checkPos;

udaaff
31.03.2008, 04:19
apexPoint.onPress = onPressHandler;
apexPoint.onRelease = onRelaseHandler;
apexPoint.onReleaseOutside = function()
{
delete this.onMouseMove;
if (basePoint.hitTest(_level0._xmouse, _level0._ymouse))
drawLine(this._x, this._y, basePoint._x, basePoint._y);
else
clearLine();
}

basePoint.onPress = onPressHandler;
basePoint.onRelease = onReleaseHandler;
basePoint.onReleaseOutside = function()
{
delete this.onMouseMove;
if (apexPoint.hitTest(_level0._xmouse, _level0._ymouse))
drawLine(this._x, this._y, apexPoint._x, apexPoint._y);
else
clearLine();
}

function onPressHandler()
{
this.onMouseMove = onMouseMoveHandler;
}

function onReleaseHandler()
{
clearLine();
delete this.onMouseMove;
}

function onMouseMoveHandler()
{
drawLine(this._x, this._y, this._parent._xmouse, this._parent._ymouse);
updateAfterEvent();
}

var line:MovieClip = this.createEmptyMovieClip("line", this.getNextHighestDepth());

function clearLine()
{
line.clear();
}

function drawLine(x1:Number, y1:Number, x2:Number, y2:Number)
{
line.clear();
line.lineStyle(0);
line.moveTo(x1, y1);
line.lineTo(x2, y2);
}

Lidia
31.03.2008, 11:45
Спасибо за кодики, но может хоть какое-то пояснение можно скинуть или уж тогда сразу готовый файл?
Лидия

Obi
31.03.2008, 12:48
Спасибо за кодики, но может хоть какое-то пояснение можно скинуть или уж тогда сразу готовый файл?
Лидия

Код Mr. Fixit'a с пояснениями:

// *** variables
var firstClicked : Boolean = false; // была-ли нажата первая кнопка

var line_mc : MovieClip = this.createEmptyMovieClip('line', 0); // создаем контейнер для будущей линии
line_mc.lineStyle(1); // ширина линии — 1 пиксел

// *** methods
function checkPos() : Void {
if(!firstClicked) { // если первая кнопка не была нажата
standOnFirstPoint(); // вызываем функцию
firstClicked = true; // говорим, что кнопка нажалась
}
else standOnSecondPoint(); // если первую кнопку уже нажимали, запускаем standOnSecondPoint();

delete this.onPress; // удаляем слушателя для той кнопки, на которую нажали
}

function standOnFirstPoint() : Void {
line_mc.moveTo(_root._xmouse, _root._ymouse); // двигаем перо к перой кнопке
}

function standOnSecondPoint() : Void {
line_mc.lineTo(_root._xmouse, _root._ymouse); // рисуем линию ко второй кнопке
}

// *** events
// добавляем слушателя
top_btn.onPress = bottom_btn.onPress = checkPos; // при нажатии на одну из кнопок, запускается функция checkPos

Alex Lexcuk
31.03.2008, 16:24
Вот примерчик для детишек.
http://kind-armadillo.pochta.ru/fla/scool_test.swf
http://kind-armadillo.pochta.ru/fla/scool_test.zip

Lidia
31.03.2008, 20:36
Добрый день.
Попробовала создать просто что-то типо варианта, когда нажимаешь на две точки еа белом (пока) поле. Выдаёт ошибки. Что я делаю не так (а деляю я явно где-то что-то не так).:rolleyes:
Лида

Obi
31.03.2008, 20:43
Пардон за большой размер — лень было кнопки рисовать.

udaaff
31.03.2008, 21:04
asdfg

Lidia
02.04.2008, 00:30
Udaaff, спасибо Вам большое. Это именно то, что мне надо было создать. Один маааленький вопросик - а как избавиться/зафиксировать высоту, когда нажата вторая точка?

С уважением,
Лидия

udaaff
02.04.2008, 03:18
Если я вас правильно понял...

Lidia
02.04.2008, 11:10
udaaff, Вы правильно меня поняла. Спасибо Вам еще раз.
Лидия