PDA

Просмотр полной версии : Вложенные мувики и onRollOver в них


Serzhik
22.06.2005, 22:31
Проблема вот в чем: на главной сцене в первом кадре на объекте висит onRollOver, по которому происходит переход на определенный кадр в другом мувике. В том мувике есть еще один мувик, на котором тоже висит onRollOver, по которому надо переходить к третьему мувику (блин, по-моему, как-то путанно излагаю). Проблема в том, что первый onRollOver отрабатывается нормально (второй мувик проигрывается), а вот уже второй onRollOver (в новом мувике) не срабатывает... Видимо, я не выхожу из первого обработчика? Вложить исходник не получается, размер zip 50кб
P.S. В принципе все это задумывалось для того, чтобы сделать что-то похожее на карту на сайте Якитории (http://www.vci.ru/map.asp?lng=0). Там общая карта (у меня это основной мувик), при наведении на центр появляется укрупненный вариант (у меня это второй мувик), на этом укрупненном варианте можно навести на объект и появится карта местонахождения оного (у меня это третий мувик). Может, это как-то по-другому проще сделать, например, через loadMovie?

Ріxеl
23.06.2005, 00:03
если хочешь вышли мне на е-маил исходник. исправлю
flasherru{a}pixel.org.ua

Serzhik
23.06.2005, 00:10
выслал:) заранее сенк. Мывик срабатывает при наведении на Западный округ. А потом хотелось бы, чтобы при наведении на красную точку, открывалась карта house1_map... Вот этого у меня не получается...
P.s. код корявый, да и картинки оставляют желать лучшего, но я только учусь:)

Штрек
23.06.2005, 01:47
Два Овера для вложенных мувов работать не будут....
Придётся вешать на один их них/лучше на основной вешать ИнтФр.
Примерно так -

mc.mmcc.onRollOver = function() {
trace(this._name);
};
mc.onEnterFrame = function() {
if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
if (fl == undefined) {
trace(this._name);
fl = 1;
}
} else {
fl = undefined;
}
};

Nirth
23.06.2005, 01:50
Можно еще так

_root.bbb.onRollOver = function () {
this.rollOver1();
this.rollOver2();
}
this.bbb.rollOver1 = function () {
trace("roolOver1");
}
this.bbb.rollOver2 = function () {
trace("rollOver2");
}

Штрек
23.06.2005, 01:59
Можно еще так

_root.bbb.onRollOver = function () {
this.rollOver1();
this.rollOver2();
}
this.bbb.rollOver1 = function () {
trace("roolOver1");
}
this.bbb.rollOver2 = function () {
trace("rollOver2");
}

И что тут во что вложено?????

Штрек
23.06.2005, 02:06
Serzhik гл. исх........

Nirth
23.06.2005, 02:11
Это альтернатива твоему подходу, плюсы на лицо - меньше проверок, и никакого onEnterFrame
а что во что вложенно я думаю ты и без меня понял=)

Штрек
23.06.2005, 02:14
Я действительно не вруб.......
Есть мув mc и вложенный в него мув mmcc
Напиши Оверы......

Ріxеl
23.06.2005, 02:17
овер в овере не работает.

исходник пофиксил и выслал.

Nirth
23.06.2005, 02:19
упс извиняюсь, я не понял вопроса пора идти спать.
не слушайте меня в этом топике больше=)

Serzhik
23.06.2005, 08:59
Спасибо огромное всем:) Pixel, тебе отдельный респект:))) Сенк :)

Nirth
23.06.2005, 11:52
Я проснулся и понял что я хотел сделать вчера=)
работает кнопка inside находиться в кнопке main

this.main.onRollOver = function() {
this.onEnterFrame = function() {
if (this.inside.hitTest(_root._xmouse, _root._ymouse, false)) {
trace(this.inside._name);
}
};
};
this.main.onRollOut = function () {
delete this.onEnterFrame;
}

Штрек
23.06.2005, 15:45
думаю ты не выспался....
когда код кладёшь, проверяй...
хотя с кем не бывает.... ;)

Nirth
23.06.2005, 15:56
исходник(десять символов)

Штрек
23.06.2005, 16:30
Ну а протестировать забыл?
Ctrl+Enter..... :p
Или ты не ту задачу решаешь -
подвёл к main - действие
подвёл к вложенному в main inside - действие

Nirth
23.06.2005, 16:36
this.main.onRollOver = function() {
this.onEnterFrame = function() {
if (this.inside.hitTest(_root._xmouse, _root._ymouse, false)) {
trace("inner but");
}else{
trace("outter but");
}
};
};
this.main.onRollOut = function () {
delete this.onEnterFrame;
}

Штрек
23.06.2005, 16:50
this.main.onRollOver = function() {
this.onEnterFrame = function() {
if (this.inside.hitTest(_root._xmouse, _root._ymouse, false)) {
trace("inner but");
}else{
trace("outter but");
}
};
};
this.main.onRollOut = function () {
delete this.onEnterFrame;
}


RoolOver должен отрабатываться один раз....
Если это сделать, как раз мой код и получится....
Топчемся на одном месте, чес.слово..... :p
Вопрос с бородой........

Nirth
23.06.2005, 16:53
ну так удали когда надо, я предложил вариант когда отентерфрейм не висит постоянно ;)
а вообще легче сделать для этого класс, и вещать свои события и не париться

Штрек
23.06.2005, 17:28
ну так удали когда надо, я предложил вариант когда отентерфрейм не висит постоянно ;)

Если не затруднит, дай рабочий вариант, чтобы ИнФр не висел постоянно и Овер отрабатывался один раз......

Nirth
23.06.2005, 17:46
import mx.events.EventDispatcher;
class com.onorange.helping.DoubleButton extends MovieClip
{
private var inner_mc : MovieClip;
private var innerInFocus : Boolean;
private var inFocus : Boolean;
public var addEventListener, removeEventListener : Function;
private var dispatchEvent, dispatchQueue : Function;
//
public function DoubleButton ()
{
this.init ();
}
private function init () : Void
{
EventDispatcher.initialize (this);
this.initOver ();
this.innerInFocus = undefined;
//перестрахуемся
this.addEventListener ('onInner', this);
this.addEventListener ('onOutter', this);
}
private function initOver () : Void
{
this.onRollOver = function ()
{
this.inFocus = true;
this.onMouseMove = function ()
{
if (this.inner_mc.hitTest (_root._xmouse, _root._ymouse, false))
{
if (this.innerInFocus)
{
/**/
}else
{
this.dispatchEvent (
{
type : 'onInner'
});
this.innerInFocus = true;
}
} else
{
if ( ! this.innerInFocus)
{
/**/
}else
{
this.dispatchEvent (
{
type : 'onOutter'
});
this.innerInFocus = false;
}
}
}
}
this.onRollOut = function ()
{
this.inFocus = false;
delete this.onMouseMove;
}
}
}
/*
* this.main.onRollOver = function() {
this.onEnterFrame = function() {
if (this.inside.hitTest(_root._xmouse, _root._ymouse, false)) {
delete
trace("inner but");
}else{
trace("outter but");
}
};
};
this.main.onRollOut = function () {
delete this.onEnterFrame;
}
*/

Мувиклип inner_mc должен быть в контейнере класса, ну и для примера вешаем на первый кадр

boo.onInner = function () {
trace("in");
}
boo.onOutter = function () {
trace("out");
}

Updated
код сырой, половину можно снести, ифы сократить и тд, делал за 3 минуты экспрессом%)

silin
23.06.2005, 21:58
вариант:
mc.onRollOver=function(){
trace('outer')
this.onMouseMove=function(){
var h=this.mcc.hitTest(_xmouse,_ymouse,1)
if(h&&!this.mcc.over){
trace('inner');
}
this.mcc.over=h;
}
}
mc.onRollOut=function(){
delete this.onMouseMove();
}

Штрек
23.06.2005, 22:45
вариант:
mc.onRollOver=function(){
trace('outer')
this.onMouseMove=function(){
var h=this.mcc.hitTest(_xmouse,_ymouse,1)
if(h&&!this.mcc.over){
trace('inner');
}
this.mcc.over=h;
}
}
mc.onRollOut=function(){
delete this.onMouseMove();
}
Самое ото....... ;)