PDA

Просмотр полной версии : Вопрос на который пока никто не смог ответить


Horror
11.01.2003, 16:03
Короче есть две ситуации.

Ситуация 1
В руте лежит гора кнопок. У каждой - уникальное имя. По нажатию на любую нужно определить имя кнопки на которую нажимаем.
Задача: КАК?

Ситуация 2
В руте лежит гора мувиков. У каждого уникальное имя. В каждом мувике - кнопка, также именованая. По нажатию на любую из кнопок через параметр _name получаем имя мувика в котором лежит кнопка.
Задача: отключить параметром .enabled=false; кнопку на которую нажали.
НЕработающий пример(который теоретически ДОЛЖЕН работать):

on (press) {
var name = _name;
// имя мувика в котором
// лежит нажатая кнопка

var link = "_root." + name + ".i2";
// i2 - имя самой кнопки на которую
// нажали + путь от корня

link.enabled = false;
// еще вот так можно попробовать :)

[link].enabled = false;

}


Пока никто не смог ответить как проделать эти операции...
Будет весело если это нельзя сделать в принципе :))

iLoveYou
11.01.2003, 16:23
Сдается мне, голубчик, гоните Вы все. Спрашивали плохо...

Horror
11.01.2003, 16:36
только суть в том что кнопки и мувики генерятся функцией.
И мы не знаем как называтся кнопка на которую нажимаем.
Вот к чему я клоню.

В коде, который ты дал - явно приписано название кнопки. Тогда и смысла нет никакого узнавать как ее зовут.

Вот пример, относящийся ко второму вопросу который я задал.
Неудачный пример к слову говоря :(

iLoveYou
11.01.2003, 16:49
Твоей идеи я не понял. Распиши словами то, что хочешь сделать - что это будет практически.

А на оба твоих вопроса я ответил. Получить имя сгенеренного мувика не сложнее, чем получить имя имеющегося. Отключить кнопку, зная ее имя, тоже возможно.

ЗЫ
b1="_level0.test."+_root.i1;
Вот это что такое?

Horror
11.01.2003, 17:07
Так.
В краце объясняю что у меня происходит.

Это игра "Пары"
Функция генерирует массив с кнопками. Затем создает дубль на каждую из них. Это все снова запихивается в массив. Затем случайным образом из него вытаскиваются 9 кнопок и дублей к ним.
Все это раскидывается по экрану.

При нажатии на кнопки мы должны получать их имена.
1. Для того чтобы знать совпали пары или нет.
2. Чтобы задать совпавшим парам параметр .enabled=false;
3. Чтобы задать НЕсовпавшим парам параметр _alpha=0;

Вот вроде и все. Затык у меня произошел как раз на получении имен этих кнопок.

Пробовал идти двумя методами:
1. Засунув кнопки в мувики производить операции уже с мувиками. В этом случае имя мувика я получаю превосходно. Но вот параметр enabled=false; не работает с переменными в путях. Т.к. мне нужно идти от корня, чтобы отключить сразу две кнопки, то приходится засовывать путь к кнопкам в переменную. Вид получается к примеру такой: [link].enabled=false; Но такая строка не работает. Почему - не понятно. Примечательно, что если трейсом вывести значение переменной link и поставить так: _root.myMovie.buttonName.enabled=false; - то все работает.

2. Раскидывал кнопки прямо в руте. Но тогда получение имен кнопок вообще не представляется возможным...

Вот такие вот пироги... :(

iLoveYou
11.01.2003, 17:12
А зачем использовать именно кнопки?

Horror
11.01.2003, 17:21
Мне показалось так проще при проектировании...
Оказалось что нет.

А какие еще варианты могут быть?
Суть то по идее одинакова...

sergwizard
11.01.2003, 18:37
Можно пойти таким путем.

Horror
11.01.2003, 18:53
СУПЕР!!! пасиба... :))

Я правда добавил еще пару строк, чтобы проверить работоспособность... РАБОТАЕТ! :) Вот они:


name=eval ("_root.qqq"+n);
name.enabled = false;


Единственное - кнопка сразу не отключается...
Убираем курсор с кнопки, потом наводим обратно - только тогда выключается. При первом щелчке она остается работоспособной.

sergwizard
11.01.2003, 19:13
Если хочешь, чтобы сразу после щелчка, - вместо on(release) напиши on(press).

Horror
11.01.2003, 19:23
Я в замешательстве... :rolleyes:
кнопка у нас аттачится из библиотеки...
не вижу в упор кода

on (...) {...}

iLoveYou
11.01.2003, 19:30
Кнопка - внутри мувика Symbol2///

ЗЫ если не срочная работа, скину сюда свой вариант, как доделаю. не срочная?

Horror
11.01.2003, 21:30
Нет. Не срочная. Думаю что сам разберусь, но буду благодарен...

iLoveYou
11.01.2003, 23:26
Я знаю, что можно было сделать лучше ;)
//+++++++++++++++++++++++++++++++++++
//code by s" iLoveYou"
//*********************************************
var i, k;
//=============
MovieClip.prototype.onRollOver = function() {
this.useHandCursor = false;
//trace(this._name);
};
//=============
a = new Array(10, 1, 2, 3, 4, 5, 6, 7, 8, 9);
function unsort() {
return random(2);
}
a.sort(unsort);
//=============
removeboth = function (k) {
for (i=0; i<10; i++) {
if (itemList[i].number == k) {
itemList[i].removeMovieClip();
}
}
};
//=============
itemList = new Array();
for (i=0; i<10; i++) {
var myItem = new Object();
myItem.prototype = new MovieClip();
myItem = _root.createEmptyMovieClip("Item"+i, i);
with (_root["Item"+i]) {
beginFill(0xff00fe);
lineStyle(1, 0xff00fe);
lineto(0, 20);
lineto(20, 20);
lineto(20, 0);
lineto(0, 0);
endFill();
_x = 40*a[i];
_y = 40;
}
if (i>4) {
myItem.number = i-5;
} else {
myItem.number = i;
}
itemList[i] = myItem;
}
//================
for (i=0; i<10; i++) {
Mouse.addListener(itemList[i]);
itemList[i].onPress = function() {
this.enabled = false;
if (this.number == k) {
removeboth(k);
mytext.text="Ура!!!";
} else {
this._alpha = 30;
mytext.text="не попал, так тебе и надо...";
}
k = this.number;
trace(k);
};
}
//================
_root.createTextField("mytext",213, 100, 100, 300, 100);

Pietrovich
12.01.2003, 03:51
мда...
какие сложности...

[link].enabled = false;
это ты к кому пытался обратиться? к богу? ;)
уж лучше к руту :)
_root[link].enabled = false; link="имя мувика, отсчитанное от рута"

а это почти готовые "пары" :)

извини за 10мин лучше не получилось... но как бороться с твоими граблями вроде ясно...

drawButton = function (name,x,y,rgb)
{
_root.count++;
_root.createEmptyMovieClip(name,_root.count);

var t = _root[name];
t.colorise = function (rgb)
{
trace(rgb)
this.beginFill(rgb, 100);
this.moveTo(0,0);
this.lineTo(20,0);
this.lineTo(20,20);
this.lineTo(0,20);
this.lineTo(0,0);
this.endFill()
clearInterval(this.i);
}
t._x=x;
t._y=y;
t._color = rgb;

t.onRelease = function ()
{
if (_root[_root.dis]._color == this._color)
{
_root[_root.dis].removeMovieClip();
this.removeMovieClip();
}
_root[_root.dis].enabled=true;
_root.dis = this._name;
this.colorise(this._color);
this.i = setInterval(t,"colorise",1000,"0x000000");

this.enabled=false;

trace(this._name)
}
t.i=setInterval(t,"colorise",1000,"0x000000");
}

drawButton("_b1",0,0,"0x990000");
drawButton("_b2",30,0,"0x009900");
drawButton("_b3",60,0,"0x000099");
drawButton("_b4",0,30,"0x990000");
drawButton("_b5",30,30,"0x009900");
drawButton("_b6",60,30,"0x000099");

iLoveYou
12.01.2003, 12:10
Ну а теперь, если у человека хватит ума разобраться в наших эпистолярных изысках, то он получит готовый продукт. Хоррор, с тебя сто тысяч мильёнов баксов :D

ЗЫ 2Pietrovich я писал это 20 минут, да и то между делом и с удовольствием... ;)

KomSerg
12.01.2003, 13:57
Я вот тоже как тос дела игру ПАРЫ
http://www.artek.yo.lv/brain.htm
но назвал правда по другому.
может там и много минусов - но самый большой то что долго генерируется расположение канртинко ( естественно что оно генерируется случайным образом.

а может можно каким то образом сделать так - допустим там
x1=Math.Random(10);
x2=.........;
как нужно написать чтобы перемнная x2 генерировалась таким же образом как и x1 но чтоб тоже Random но чтоб исключалось то значение которое присвоилоось переменной x1 !

iLoveYou
12.01.2003, 14:04
Сергей, ты мой сорс смотрел?
a = new Array(10, 1, 2, 3, 4, 5, 6, 7, 8, 9);
function unsort() {
return random(2);
}
a.sort(unsort);
а потом в цикле
_x = 40*a[i];


:)

Horror
13.01.2003, 12:50
Пасибки.
На самом деле кнопки у меня НЕ генерируются. Они готовыми лежат в библиотеке. Т.к. везде битмаповый рисунок.
Лишь когда дубли создаются - тока тогда.

А функцию перемешивания я использовал такую:


function MixArray(array, _array) {
//Обнуляем выходной массив. 0 - признак того что ячейка свободна
for (i = 0; i < array.length; i ++)
_array[i] = 0;

//Смотрим каждый элемент исходного массива
for (i = 0; i < array.length; i ++)
{
//Находим куда ставить элемент в выходной массив
new_pos = random(array.length);

// Если ячейка в выходном массиве занята или вставляем
// элемент на ту же позицию - меняем позицию
while(new_pos == i || _array[new_pos]!=0)
{
new_pos++;
if (new_pos>=array.length)
new_pos = 0;
}
//Вставка элемента на место
_array[new_pos] = array[i];
}
}



Используется она два раза.

1. Берет из библиотеки случайные картинки.
2. Когда созданы для них дубли, снова все это перемешивается...

iLoveYou
13.01.2003, 15:39
Ты можешь смело претендовать на звание лучшего флеш-кодера года...

Horror
13.01.2003, 15:45
Да куда там...
расти и расти еще... :rolleyes:

iLoveYou
13.01.2003, 15:55
На самом деле кнопки у меня НЕ генерируются. Они готовыми лежат в библиотеке. Т.к. везде битмаповый рисунок.
Лишь когда дубли создаются - тока тогда.
Ты вообще в моем сорсе что-нибудь понял? Без обид, по-моему, нет. Я ж тебе, как и Петрович, готовый алгоритм дал. Не нужно ничего дублировать, не нужно имен, все сличается по заранее определенному признаку. И какая принципиальная разница: генерить или аттачить, а? Можно, конечно, делать так, как ты, но...
ЗЫ Памятуя об updateAfterEvent(), не буду спорить, а то опять намекнешь, что я ни хера, пардон, не знаю, в отличие от тебя... :)
ЗЗЫ благодарить потом будешь, когда будет готово - дашь ссылку...

Horror
13.01.2003, 16:33
Да все я понял.
Просто изначально я пошел по пути, код к которому у меня был практически готов. С именами только затык был. Sergwizard помог решить эту проблему, поэтому я двигаюсь дальше в том же направлении.
Эту версию доделаю, попробую сделать в варианте, который предложил ты и Петрович.


ЗЫ - не надо снова болячки терзать, а? Намекал не я про то что ктото нихрена не знает. Я сказал человеку что upadateAfterEvent может помочь. Это мое мнение. Если тебе оно не нравится - объясни почему... Хамить то все горазды.

iLoveYou
13.01.2003, 16:56
Намекал не я про то что ктото нихрена не знает.
Ты неудачно выразился, или кто-то другой намекал, а? :D
Хамить то все горазды
Если ты мне покажешь мою фразу, которая кажется тебе хамской, то это будет хорошо.
Я сказал человеку что upadateAfterEvent может помочь. Это мое мнение.
А еще ты обещал "функцию", и я ее хотел бы увидеть ;)

:)

Horror
13.01.2003, 17:20
Вообще то это уже флейм пошел, но отвечу.
Урл тут, читай внимательно...

http://www.flasher.ru/forum/showthread.php?s=&threadid=41761

Я-то как раз "ну-ну" могу говорить. А вот инструкцию себе ты написал выше.

Давай заканчивай короче, у меня абсолютно нет никакого желания трепатся на тему кто кому больше нагрубил.

По поводу функции - беру свои слова обратно. Обшибся. Не сработает она в том случае.

iLoveYou
13.01.2003, 17:35
Ну если иронию принимать за хамство, то как тогда по улицам ходить, там же одни грубияны и хамы, особенно продавщицы и пьяные дворники. ;)
Мои слова так остро уж не воспринимай. Но тебе просто не мешает сбавить пылу...
Относительно функции - просто словами не бросайся :) :) :)
Желаю успехов. :)

Horror
13.01.2003, 17:38
Ладно, проехали.
Закончу игруху, выложу исходник - поматюгаетесь :)

Horror
15.01.2003, 15:02
Все в принципе готово.
Осталось таблицу результатов сделать и всякие мелкие штрихи.
Могу щас выложить в принципе или дождетесь финальной версии? ;)

iLoveYou
16.01.2003, 18:00
Лучше - финальную.