Просмотр полной версии : Мышь покидает рабочее поле
Как узнать когда мышь покидает пределы рабочего поля ролика? Эт в принципе очень важно ...
Можно конечно обходными путями, реализуя внешнюю связь с JavaScript, но это плохое решение. Есть что-то "стандартное" для решения этой проблемки?
someListener = new Object();
someListener.onMouseMove = function () {
if(_xmouse <= 0 || _xmouse >= Stage.width){
// Mыша убежала по координате x за пределы экрана флешки
}
};
Mouse.addListener(someListener);
Может поможет?
Nox Noctis
18.05.2004, 15:08
не поможет.
флэш-плагин следит за мышью только в пределах видимой бласти ролика.
а при резком убирании курсора из области флэш-плагина, флэш не успевает засечь положение мышки, и залипают координаты курсора где-то непонятно где посередине ролика. последние, которые успели определиться.
чтобы определять выход за границы ролика, придётся возиться с событиями кнопок - они срабатывают мгновенно при изменении положения курсора мыши. есть несколько способов.
2Nox Noctis
Можно подробнее? Даже представить себе не могу чем кнопка может быть полезна в данном случае ...
sergwizard
19.05.2004, 02:20
Да..., я согласен: кнопка это очень полезная вещь.
Оригинал написал(а) juice
2Nox Noctis
Можно подробнее? Даже представить себе не могу чем кнопка может быть полезна в данном случае ...
Ну поверх стола кнопку и ... будет праздник. :p
sergwizard
19.05.2004, 03:51
Ну поверх стола кнопку и ... будет праздник.
Праздника ему захотелось... Иди ото дом достраивай. :D
А что ты будешь делать с остальными кнопками на столе? Ты же им уши затыкаешь....
Оригинал написал(а) sergwizard
А что ты будешь делать с остальными кнопками на столе? Ты же им уши затыкаешь....
Так под низ её, под низ. :p
sergwizard
19.05.2004, 10:47
Так если ты ее "по низ", то тогда лежащие НАД ней объекты будут перекрывать ее. И, при попадании мыши на эти объекты, у тебя будет отрабатываться выход мышки за пределы ролика.
Так что Nox прав, говоря, что "придётся возиться с событиями кнопок". Вот посмотри мой примерчик.
Не хрена кнопки плодить.
Скромнее надо быть. :D
2 sergwizard: спасибо за абсолютно рабочий код, (только в конце там непонятно зачем инкрементируются высоты кнопок). Если можно, черканите пару строк-обьяснений:
1) Св-во Mouse.inner мы обьявляем сами ?
2) Mouse.watch - этого метода я нигде не встречал.
3) Что делает метод addProperty, тоже не знаю о нем ничего
sergwizard
20.05.2004, 22:35
1) Св-во Mouse.inner мы обьявляем сами ?
2) Mouse.watch - этого метода я нигде не встречал.
3) Что делает метод addProperty, тоже не знаю о нем ничего
Открой этот исходник (я убрал все лишнее), и на его примере я попробую дать ответы на твои вопросы. Сразу предупреждаю: объясняльщик из меня хреновый, поэтому буду объяснять просто и незатейливо, - своими словами. Так что, если в чем-то ошибусь, пусть меня поправят.
state_btn.useHandCursor = false;
Создаем неопределенный объект (в прошлом исходнике я использовал для этого объект "Mouse").
obj={};
Пишем методы, которые позднее будут наследовать все объекты класса "Button"
Button.prototype.privateOnRollOut = function(){
obj.inner = false;
}
Button.prototype.privateOnRollOver = function(){
obj.inner = true;
}
Добавляем классу "Button" новые проперти: "onRollOut" и "onRollOver" . Чё говорите? У кнопок уже есть такие проперти? Ну и что, а я хочу добавить еще свои личные… И теперь, при событиях onRollOver и onRollOut, кнопки будут вызывать функции "privateOnRollOut" и " privateOnRollOver ", при этом меняя свойства "inner" у объекта "obj".
Button.prototype.addProperty("onRollOut",
function(){
this.privateOnRollOut();
}, null
)
Button.prototype.addProperty("onRollOver",
function(){
this.privateOnRollOver();
}, null
)
Заставляем объект "obj" следить за изменением значения "inner", и при изменении этого значения вызывать соответствующие функции (менять текс в текстовом поле и менять значение некоторой переменной "k").
obj.watch("inner",
function(){
txt = arguments[2] ? "inside" : "outside";
k = arguments[2] ? true : false;
}
)
Теперь, чтобы не пропадали зря вновь приобретенные свойства кнопок, используем их для вызова любых функций, которые нам нужны. Я, для примера нарисовал такую:
MovieClip.prototype.rotIt = function(){
col = new Color(this);
this.onEnterFrame = function(){
if(click){
k ? this._rotation+=5 : this._rotation-=5;
k ? col.setRGB(0xFF0000) : col.setRGB(0x0000FF);
}
}
}
mc.rotIt();
b1_btn.onRelease = function(){
click = (click+1)%2;
}
Вот, вроде, и все.
ЗЫ. В предыдущем исходнике я инкрементировал не высоты кнопок, а изменял их положение по _y. Это я сделал, чтобы показать, что кнопки не мешают друг другу, и RollOver на вышележащую кнопку, не мешают нижележащей отслеживать это же событие.
Nox Noctis
21.05.2004, 14:29
надо обязательно добавить onDragOut/Over - а то легко заглючить всё это.
и есть проблема - селектабельные текстовые поля :)
надо патчить..
Nox Noctis
21.05.2004, 14:57
ах да. и еще. прочитал наконец код :))
не особо в тему, но
Button.prototype.addProperty("onRollOut", function () {
trace("onRollOut of "+this+" called");
}, function (f) {
if (typeof (f) == "function") {
this.myOnRollOut = f;
}
});
Button.prototype.addProperty("onRollOver", function () {
trace("onRollOver of "+this+" called");
}, function (f) {
trace("onRollOut of "+this+" called");
});
// 'btn' -- some button
trace(btn.onRollOver+" : "+typeof btn.onRollOver);
trace(btn.onRollOut+" : "+typeof btn.onRollOut);
//
sergwizard, тебя здесь ничего не смущает? :))
и к тому же можно мувиклипу задать кнопочные события...
sergwizard
21.05.2004, 20:30
надо обязательно добавить onDragOut/Over - а то легко заглючить всё это.
и есть проблема - селектабельные текстовые поля :)
надо патчить..
Патчить надо все, что сделано на колене и на скорую руку. :) Добавить onDragOut/Over – не проблема. А вот с селектабельными TF я пока не вижу способа. То есть я вижу как поправить на setFocus, но этого –явно – недостаточно.
Повторяю, я наскоро переделывал это из старого моего исходника, в котором тако-о-ое наворочено.
sergwizard, тебя здесь ничего не смущает? :))
Ха, меня много что смущает. Например, такое:
Button.prototype.myOnRollOut = function(){trace("myOnRollOver of "+this+" called");};
Button.prototype.myOnRollOver = function(){trace("myOnRollOut of "+this+" called");};
Button.prototype.addProperty("onRollOut", function () {
this.myOnRollOut();
}, null
);
Button.prototype.addProperty("onRollOver", function () {
this.myOnRollOver();
}, null
);
// 'btn' -- some button
btn.myOnRollOver = function(){ //Попробуй то же самое с btn.onRollOver
//for(a in btn){
// trace(a + ":"+ typeof(a));
//}
if(typeof (this.myOnRollOver) == "function")
//Затем попробуй написать вместо "function" - "string"
trace("this is a : "+ typeof this.myOnRollOver)
}
Тут явно надо привлекать ASSetPropFlags. Будет нужда – займусь. А пока процитирую Штрека:
Не хрена кнопки и (селектабельные поля) плодить.
Скромнее надо быть. :D
Но, любым твоим замечаниям и советам буду рад.
sergwizard
23.05.2004, 02:19
Самое простое, что смог придумать для селектабл TF, - вот это:
this.onMouseMove = function(){
if(TextField._xmouse>=0 && TextField._xmouse<=TextField._width&&TextField._ymouse>=0&&TextField._ymouse<=TextField._height){
obj.inner = true;
}
}
Придумывать что-сложнее - овчинка выделки не стоит.
Хотя буду рад, если кто-нибудь предложит более красивый и действенный способ.
treety01
06.07.2004, 11:16
...возможноли в место этого большого буттона (на фоне)
использовать мувиклип?...как? (я с портотипами не работал)
ethereal999
18.02.2006, 05:24
небольшое дополнение к проблеме (я думаю, будет полезно новичкам, вроде меня, гуру не кидайтесь помидорами... :))
В случае таскания объекта (и утаскивания за границы клипа) вместо onRelease можно воспользоваться onMouseUp.
Например, так:
myMc.onMouseUp = function(){
if (cursor._x > Stage.width || cursor._x < 0 || cursor._y > Stage.height || cursor._y < 0){
if (Math.abs (this._x - this.old_x) > 3 || Math.abs (this._y - this.old_y) > 3){
this.onReleaseFunc();
}
}
}
>>В случае таскания объекта (и утаскивания за границы клипа) вместо >>onRelease можно воспользоваться onMouseUp.
уже есть придуманный onReleaseOutside();
ethereal999
18.02.2006, 12:32
meiciuc
блин... :)
=============
впрочем то, да не то...
использовал onReleaseOutside, утащил объект за край мувика, естественно, при этом объект залип где-то по дороге (ближе к пересеченному краю), а когда отпустил, то скрипт снял значения мыши там, где я ее отпустил (ну например, -500 -400). И там же появился мой объект, а так как была задействована динамика (пружина), то его движение назад выглядело неправдоподобно. С onMouseUp такого не происходит.
Хотя это может я так криво написал...
ethereal999
демонстрация вагона знаний :)
ethereal999
кстати, на будущее эта идея пригодится тебе, если будешь перетаскивать объекты не тормозным драг-дропом и надо будет ограничивать движение клипа заданными рамками. Не забудь.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.