PDA

Просмотр полной версии : кнопки(клипы) в массиве


cdc7600
13.01.2009, 17:21
собственно, чтоб не присваивать кнопке каждый раз однотипные функции попыталась запихнуть их в массив, но увы ничего не происходит
for(var i:Number = 1;i<8;i++){
var dskBt:MovieClip = attachMovie("dsk"+i, "dskBt"+i, i);
dskBt.onRollOver=function(){
dskBt._xscale=105;
dskBt._yscale=105;
dskBt._x=dskBt._x-m;
dskBt._y=dskBt._y-m;
}
dskBt.onRollOut=function(){
dskBt._xscale=100;
dskBt._yscale=100;
dskBt._x=dskBt._x+m;
dskBt._y=dskBt._y+m;
}
}

AlexCooper
13.01.2009, 17:30
это и не удевительно.
Так как dskBt:MovieClip у вас статический относительно роота, вместимое выконечно меняете при иттерациях. Вообще м
for(var i:Number = 1;i<8;i++)
{
_root['dskBt'+i]:MovieClip = attachMovie("dsk"+i, "dskBt"+i, i);
_root['dskBt'+i].onRollOver=function()
{
_root['dskBt'+i]._xscale=105;
_root['dskBt'+i]._yscale=105;
_root['dskBt'+i]._x=_root['dskBt'+i]._x-m;
_root['dskBt'+i]._y=_root['dskBt'+i]._y-m;
}
_root['dskBt'+i].onRollOut=function()
{
_root['dskBt'+i]._xscale=100;
_root['dskBt'+i]._yscale=100;
_root['dskBt'+i]._x=_root['dskBt'+i]._x+m;
_root['dskBt'+i]._y=_root['dskBt'+i]._y+m;
}
}

amexdesign
13.01.2009, 17:31
for(var i:Number = 1;i<8;i++){
var dskBt:MovieClip = attachMovie("dsk", "dskBt"+i, i);
dskBt.onRollOver=function(){
this._xscale=105;
this._yscale=105;
this._x=this._x-m;
this._y=this._y-m;
}
dskBt.onRollOut=function(){
this._xscale=100;
this._yscale=100;
this._x=this._x+m;
this._y=this._y+m;
}
}

cdc7600
13.01.2009, 17:43
AlexCooper спасибо, но не помогает, пишет синтаксическую ошибку :(
amexdesign ошибок нет , но не работает.. ндя туплю)

AlexCooper
13.01.2009, 17:45
Тогда так
for(var i:Number = 1;i<8;i++)
{
_root.attachMovie("dsk"+i, "dskBt"+i, i);
_root['dskBt'+i].onRollOver=function()
{
this._xscale=105;
this._yscale=105;
this._x=this._x-m;
this._y=this._y-m;
}
_root['dskBt'+i].onRollOut=function()
{
this._xscale=100;
this._yscale=100;
this._x=this._x+m;
this._y=this._y+m;
}
}

cdc7600
13.01.2009, 17:56
в общем это навигатор, который двигается по отношению к мышке влево\вправо, а обработчик для вложенных клипов, disk(основной двигающийся, в него вложены dsk, которые увеличиваются по наведению)
var m=5;
// левый отступ
var l=100;
// правый отступ
var p=500;
function left(){
disk._x-=2;
}
function right(){
disk._x+=2;
}
onEnterFrame = function(){
if((_root._xmouse<l)&&(disk._x>-50))
{left();}
else if((_root._xmouse>p)&&(disk._x<50)) {right();}

for(var i:Number = 1;i<8;i++)
{
_root.attachMovie("dsk"+i, "dskBt"+i, i);
_root.disk['dskBt'+i].onRollOver=function()
{
this._xscale=105;
this._yscale=105;
this._x=this._x-m;
this._y=this._y-m;
}
_root.disk['dskBt'+i].onRollOut=function()
{
this._xscale=100;
this._yscale=100;
this._x=this._x+m;
this._y=this._y+m;
}
}
}

когда буду пытаться подключить хмл я вообще повешусь походу :)

amexdesign
13.01.2009, 21:22
for(var i:Number = 0;i<8;i++){
// на _root должен лежать пустой MovieClip с instanzname "disk"
var btn = _root.disk.attachMovie("dsk", "dsk"+i, i);
btn._x = 0
btn._y = 0
btn._x += (i%8)*(btn._width +5);
/*btn._x = 0 // активируйте этот
btn._y = 0 // код, если кнопки
btn._y += Math.floor(i%8)*(btn._height+5);*/ //распологаются вертикально
btn.onRollOver=function(){
this._xscale=105;
this._yscale=105;
//this._x=this._x-m;
//this._y=this._y-m;
}
btn.onRollOut=function(){
this._xscale=100;
this._yscale=100;
//this._x=this._x+m;
//this._y=this._y+m;
}
}

AlexCooper
14.01.2009, 04:10
когда буду пытаться подключить хмл я вообще повешусь походуМаксимум выпадет пару кнопок из клавиатуры, треснет монитор, скуриться пачка сигарет, выпьеться банка кофе, может и наоборот. Но это уже всё флейм:rolleyes: На самом деле всё просто, пишите, помогу. Только желательно с исходниками. В голове компиляция похуже, а самому объекты делать так не хочеться.

cdc7600
14.01.2009, 13:26
Спасибо) поняла свою ошибку, у меня не были линки прописаны для клипов)) функция аттач создаёт просто экземпляр класса?))

Sajaxt
14.01.2009, 20:29
У меня похожая проблема. Имеется два мувика на сцене чтобы не писать сценарий к каждому я пропсываю усё через for(...), но ничего не пашет.
Когда сценарий прописан только для одного мувика всё работает. В чем тут может быть проблема?

вот так не пашет:

var blr:Array = new Array(false,false);
var rot_flag:Array = new Array(true,true);
//-------------------------------------------------------------------------------------
for(var i=0;i<2;i++){
_root["btn"+i].onEnterFrame = function(){
if(rot_flag[i]==true){
_root["btn"+i]._rotation+=2;
if(_root["btn"+i]._rotation==8){
rot_flag[i] = false;
}
}else{
_root["btn"+i]._rotation-=2;
if(_root["btn"+i]._rotation==(-8)){
rot_flag[i] = true;
}
}
if(blr[i]==false){
bluref = new flash.filters.BlurFilter(5, 5, 3);
_root["btn"+i].filters = [bluref];
}else{
bluref = new flash.filters.BlurFilter(1, 1, 1);
_root["btn"+i].filters = [bluref];
}
}
//-------------------------------------------------------------------------------------
_root["btn"+i].onRollOver = function(){
blr[i] = true;
}
//-------------------------------------------------------------------------------------
_root["btn"+i].onRollOut = function(){
blr[i] = false;
}
//-------------------------------------------------------------------------------------
_root["btn"+i].onPress = function(){
trace("Hello");
}
}



а вот так пашет:

var blr=false;
var rot_flag = true;
//-------------------------------------------------------------------------------------
btn0.onEnterFrame = function(){
if(rot_flag==true){
btn0._rotation+=2;
if(btn0._rotation==8){
rot_flag = false;
}
}else{
btn0._rotation-=2;
if(btn0._rotation==(-8)){
rot_flag = true;
}
}
if(blr==false){
bluref = new flash.filters.BlurFilter(5, 5, 3);
btn0.filters = [bluref];
}else{
bluref = new flash.filters.BlurFilter(1, 1, 1);
btn0.filters = [bluref];
}
}
//-------------------------------------------------------------------------------------
btn0.onRollOver = function(){
blr = true;
}
//-------------------------------------------------------------------------------------
btn0.onRollOut = function(){
blr = false;
}
//-------------------------------------------------------------------------------------
btn0.onPress = function(){
trace("Hello");
}


Плэс прилагаю файлы

AlexCooper
14.01.2009, 20:36
Вы забываете самое главное
Что запись
_root["btn"+i].onRollOver = function(){
blr[i] = true;
}
напрямую зависит от переменной i Одно дело когда вы динамически создали обработчик, тоесть слушатель на указанную кнопку "onRollOver" другое дело когда при вызове компилятор разбирает слушатель, и когда он попадает на [i] от берёт её значение. Пробуйте использывать значения this._name либо создавайте дополнительные свойства для клипа которые будут хранить данные той самой [i]

Добавлено через 4 минуты
_root["btn"+i].onRollOver = function(){
blr[this._name.substring(3,this._name.length)] = true;
}
//-------------------------------------------------------------------------------------
_root["btn"+i].onRollOut = function(){
blr[this._name.substring(3,this._name.length)] = false;
}

Sajaxt
14.01.2009, 20:43
я недопонял, как использовать знаечние


this._name