|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
Проблемы с программированием "инвентаря"
Всем привет,
Прошу гуру о помощи, уже третий день никак преодолеть не могу одну весчь. В общем есть несколько предметов которые можно будет помещать в любую из ячеек т.н. инвентаря (типа как в РПГ) Все перемещается прекрасно, только вот никак не могу записать условие "если ячейка занята, то предмет в нее не добавляется", чтоб нельзя было класть в одну ячейку по два и более предмета. Вот код... Первый кадр: //Обозначаю что ячейки 1,2,3,4,5,6 - пустые Empty1="0"; Empty2="0"; Empty3="0"; Empty4="0"; Empty5="0"; Empty6="0"; На нем находятся Предметы (у меня портфели) - 6 мувиков с линками Portfel1, Portfel2...Portfel6 для перетаскивания. На каждый мувик повешен код on (press) { //Переход к функции для начала перетаскивания toStart(Portfel1); } on (release) { //Переход к функции для окончания перетаскивания toStop(Portfel1); } На сам кадр вешаю код: stop(); //Остановка кадра function toStart(NameP){ //Начало переноса предмета startDrag (NameP); if (box1.hitTest(_root._xmouse,_root._ymouse,false)){ Empty1="0";}; //Освобождаем ячейку 1 (если предмет в ней) if (box2.hitTest(_root._xmouse,_root._ymouse,false)){ Empty2="0";}; //Освобождаем ячейку 2 (если предмет в ней) if (box3.hitTest(_root._xmouse,_root._ymouse,false)){ Empty3="0";}; //Освобождаем ячейку 3 (если предмет в ней) if (box4.hitTest(_root._xmouse,_root._ymouse,false)){ Empty4="0";}; //Освобождаем ячейку 4 (если предмет в ней) if (box5.hitTest(_root._xmouse,_root._ymouse,false)){ Empty5="0";}; //Освобождаем ячейку 5 (если предмет в ней) if (box6.hitTest(_root._xmouse,_root._ymouse,false)){ Empty6="0";}; //Освобождаем ячейку 6 (если предмет в ней) } function toStop(NamePortfel){ //При отпускании предмета if (box1.hitTest(_root._xmouse,_root._ymouse,false)){ //Проверка находится ли портфель над ячейкой 1 (box1) NameP=NamePortfel; ItemInBoxX=259; ItemInBoxY=180; //Координаты предмета в ячейке //Проверяем пустая ли ячейка 1 и если пустая то переходим к функции SelectBox if (Empty1="0"){ Empty1="1"; SelectBox(NameP,ItemInBoxX,ItemInBoxY,"box1",Empty1)} //если ячейка не пустая то переходим к функции GoItemToStart else if (Empty1="1"){ GoItemToStart(NameP,"box1")} //вывод данных для отладки при Empty=1 ячейка заполнена при Empty=0 - пуста infoBox=" box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (infoBox); infoBox2=" box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (infoBox2); }; if (box2.hitTest(_root._xmouse,_root._ymouse,false)){ NameP=NamePortfel; ItemInBoxX=332; ItemInBoxY=180; if (Empty2="0"){ Empty2="1"; SelectBox(NameP,ItemInBoxX,ItemInBoxY,"box2",Empty2)} else if (Empty2="1"){ GoItemToStart(NameP,"box2")} infoBox=" box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (infoBox); infoBox2=" box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (infoBox2); }; if (box3.hitTest(_root._xmouse,_root._ymouse,false)){ NameP=NamePortfel; ItemInBoxX=405; ItemInBoxY=180; if (Empty3="0"){ Empty3="1"; SelectBox(NameP,ItemInBoxX,ItemInBoxY,"box3",Empty3)} else if (Empty3="1"){ GoItemToStart(NameP,"box3")} infoBox=" box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (infoBox); infoBox2=" box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (infoBox2); }; if (box4.hitTest(_root._xmouse,_root._ymouse,false)){ NameP=NamePortfel; ItemInBoxX=259; ItemInBoxY=253,5; if (Empty4="0"){ Empty4="1"; SelectBox(NameP,ItemInBoxX,ItemInBoxY,"box4",Empty4)} else if (Empty4="1"){ GoItemToStart(NameP,"box4")} infoBox=" box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (infoBox); infoBox2=" box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (infoBox2); }; if (box5.hitTest(_root._xmouse,_root._ymouse,false)){ NameP=NamePortfel; ItemInBoxX=332; ItemInBoxY=253,5; if (Empty5="0"){ Empty5="1"; SelectBox(NameP,ItemInBoxX,ItemInBoxY,"box5",Empty5)} else if (Empty5="1"){ GoItemToStart(NameP,"box5")} infoBox=" box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (infoBox); infoBox2=" box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (infoBox2); }; if (box6.hitTest(_root._xmouse,_root._ymouse,false)){ NameP=NamePortfel; ItemInBoxX=405; ItemInBoxY=253,5; if (Empty6="0"){ Empty6="1"; SelectBox(NameP,ItemInBoxX,ItemInBoxY,"box6",Empty6)} else if (Empty6="1"){ GoItemToStart(NameP,"box6")} infoBox=" box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (infoBox); infoBox2=" box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (infoBox2); }; }; function SelectBox (Portfel,ItemXBox,ItemYBox,Name_Box,EmptyBox){ //Перенос портфеля в нужную ячейку Portfel._x=ItemXBox; Portfel._y=ItemYBox; //info="координаты: x "+ItemXBox+ " y "+ItemYBox+" Портфель: "+NameP; info="Портфель добавлен в ячейку "+Name_Box; trace (info); stopDrag (); } function GoItemToStart(NamePortfel,NameBox){ //Если ячейка занята то переносим портфель в координаты 0,0 ItemX=0; ItemY=0; infoempty="Ячейка "+NameBox+" занятa"; trace (infoempty); NamePortfel._x=ItemX; NamePortfel._y=ItemY; //stopDrag (); } Прошу помощи ибо я сам практически спекся (Желательно на AS 2.0 ибо я только еще учусь) вот ссылка на исходник: itemmm.rar |
|
|||||
Аммм..... упростите свой код для начала.
for ( var i=1; i<6; i++) { this["box"+i].hitTest(_root._xmouse,_root._ymouse,false) // и так далее if (this["box"+i].hitTest(_root._xmouse,_root._ymouse,false)) { } } Добавлено через 2 минуты Empty1="0"; Empty2="0"; Empty3="0"; Empty4="0"; Empty5="0"; Empty6="0"; перепишИте так: var Empty:Array = [null,0,0,0,0,0,0] Обращение к эл-ту массива - Empty[ i ] |
|
|||||
Модрон-ветеринар
|
- это вы тут приравниваете, а не сравниваете.
Нужно
__________________
Идите первым! |
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
учел рекомендации...
Спасибо огромное всем откликнувшимся. Вроде упростил код, но опять что то не вяжется, а конкретнее не работает корректно отпускание - наверное, что то с условиями намудрил или цикл как то не так прописал, если не сложно гляньте еще разок пожалуста, исходник прилагаю.
stop(); //Остановка кадра function toStart(NameP){ //Начинаем перенос предмета for (var i=1; i<6; i++){ if (this["box"+i].hitTest(_root._xmouse,_root._ymouse,false)){ if (this["Empty"+i]="1"){ this["Empty"+i]="0" } //Освобождаем ячейку(если предмет в ней) } } info="box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (info); info2="box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (info2); startDrag (NameP); } function toStop(NamePortfel){ //Отпускаем переносимый предмет for ( var i=1; i<6; i++){ //Проверка находится ли портфель над одной из ячеек if (this["box"+i].hitTest(_root._xmouse,_root._ymouse,false)){ //если находится то переходим к функции добавления портфеля в ячейку if (this["Empty"+i]=="0"){ this["Empty"+i]="1"; AddToBox(NamePortfel,this["box"+i]) info="box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (info); info2="box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (info2); startDrag (NameP); } } //иначе обращаемся к функции возвращающей портфель на его начальное положение else if (this["Empty"+i]==1){ GoToStart(NameP,this["box"+i])} } } function AddToBox (Portfel,Name_Box){ //Перенос портфеля в нужную ячейку if (Name_Box=="box1"){ ItemInBoxX=259; ItemInBoxY=180; } //Координаты портфеля в 1 ячейке if (Name_Box=="box2"){ ItemInBoxX=332; ItemInBoxY=180; } //Координаты портфеля в 2 ячейке if (Name_Box=="box3"){ ItemInBoxX=405; ItemInBoxY=180; } //Координаты портфеля в 3 ячейке if (Name_Box=="box4"){ ItemInBoxX=259; ItemInBoxY=253,5; } //Координаты портфеля в 4 ячейке if (Name_Box=="box5"){ ItemInBoxX=332; ItemInBoxY=253,5; } //Координаты портфеля в 5 ячейке if (Name_Box=="box6"){ ItemInBoxX=405; ItemInBoxY=253,5; } //Координаты портфеля в 6 ячейке Portfel._x=ItemInBoxX; Portfel._y=ItemInBoxY; info="Портфель "+Portfel+" добавлен в ячейку "+Name_Box; trace (info); stopDrag (); } function GoToStart(NamePortfel,NameBox){ //Если ячейка занята то переносим портфель в его начальные координаты ItemX=0; //Начальные координаты портфелей - задам потом if (NamePortfel=="Portfel1"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 1 if (NamePortfel=="Portfel2"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 2 if (NamePortfel=="Portfel3"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 3 if (NamePortfel=="Portfel4"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 4 if (NamePortfel=="Portfel5"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 5 if (NamePortfel=="Portfel6"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 6 NamePortfel._x=ItemX; NamePortfel._y=ItemY; infoempty="Ячейка "+NameBox+" занятa"; trace (infoempty); stopDrag (); } Последний раз редактировалось vivado; 25.05.2011 в 15:48. |
|
|||||
Цитата:
Надо писать так: if ( Empty[i] == "1" ) И вам уже написали - значок "=" это ПРИСВАИВАНИЕ переменной значения, а если вы СРАВНИВАЕТЕ, то "=" - должно быть ДВОЙНОЕ. То есть "==" |
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
Подправил как ты сказал, но, что то не получается...
И при трассировке Empty1...Empty6 теперь не отображаются... stop(); //Остановка кадра function toStart(NameP){ //Начинаем перенос предмета for (var i=1; i<6; i++){ if (this["box"+i].hitTest(_root._xmouse,_root._ymouse,false)){ if (Empty[i]=="1"){ Empty[i]="0"; } //Освобождаем ячейку(если предмет в ней) } } info="box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (info); info2="box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (info2); startDrag (NameP); } function toStop(NamePortfel){ //Отпускаем переносимый предмет for ( var i=1; i<6; i++){ //Проверка находится ли портфель над одной из ячеек if (this["box"+i].hitTest(_root._xmouse,_root._ymouse,false)){ //если находится то переходим к функции добавления портфеля в ячейку if (Empty[i]=="0"){ Empty[i]="1"; AddToBox(NamePortfel,this["box"+i]) info="box1:"+Empty1+" box2:"+Empty2+" box3:"+Empty3; trace (info); info2="box4:"+Empty4+" box5:"+Empty5+" box6:"+Empty6; trace (info2); startDrag (NameP); } } //иначе обращаемся к функции возвращающей портфель на его начальное положение else if (Empty[i]=="1"){ GoToStart(NameP,this["box"+i])} } } function AddToBox (Portfel,Name_Box){ //Перенос портфеля в нужную ячейку if (Name_Box=="box1"){ ItemInBoxX=259; ItemInBoxY=180; } //Координаты портфеля в 1 ячейке if (Name_Box=="box2"){ ItemInBoxX=332; ItemInBoxY=180; } //Координаты портфеля в 2 ячейке if (Name_Box=="box3"){ ItemInBoxX=405; ItemInBoxY=180; } //Координаты портфеля в 3 ячейке if (Name_Box=="box4"){ ItemInBoxX=259; ItemInBoxY=253,5; } //Координаты портфеля в 4 ячейке if (Name_Box=="box5"){ ItemInBoxX=332; ItemInBoxY=253,5; } //Координаты портфеля в 5 ячейке if (Name_Box=="box6"){ ItemInBoxX=405; ItemInBoxY=253,5; } //Координаты портфеля в 6 ячейке Portfel._x=ItemInBoxX; Portfel._y=ItemInBoxY; info="Портфель "+Portfel+" добавлен в ячейку "+Name_Box; trace (info); stopDrag (); } function GoToStart(NamePortfel,NameBox){ //Если ячейка занята то переносим портфель в его начальные координаты ItemX=0; //Начальные координаты портфелей - задам потом if (NamePortfel=="Portfel1"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 1 if (NamePortfel=="Portfel2"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 2 if (NamePortfel=="Portfel3"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 3 if (NamePortfel=="Portfel4"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 4 if (NamePortfel=="Portfel5"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 5 if (NamePortfel=="Portfel6"){ ItemX=0; ItemY=0; } //Начальные координаты портфеля 6 NamePortfel._x=ItemX; NamePortfel._y=ItemY; infoempty="Ячейка "+NameBox+" занятa"; trace (infoempty); stopDrag (); } |
|
|||||
Empty1 - у вас более нет! Есть Empty[1]
мой_клип.stopDrag (); - так это пишется. |
|
|||||
Вот рабочий исходник. 100 евро.
Чтобы работало и ползало скачайте и поставьте себе пакет http://www.greensock.com/tweenlite/ |
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
Это снова я...
Спасибо за исходник, но зачем все так усложнять+ еще и ЯвуСкрипт подключать, ведь наверняка можно обойтись одним AS. Вернее я знаю, что можно, но пока не догнал как ))) Помогайте братцы...
Посмотрите код плиз... stop(); //Остановка кадра function toStart(NameP){ //Функция переноса предмета startDrag(NameP); //Включаем перенос предмета for (var i=1; i<6; i++){ //Проверяем находится ли предмет над ячейкой if (this["box"+i].hitTest(_root._xmouse,_root._ymouse,false)){ if (Empty[i]=="1"){ Empty[i]="0"; } //Присваиваем ячейке статус "свободна" (Empty[i]=0)(если предмет забираем из нее) } } } function toStop(NameP2){ //Отпускаем переносимый предмет for ( var a=1; a<6; a++){ //Проверка находится ли предмет над одной из ячеек if (this["box"+a].hitTest(_root._xmouse,_root._ymouse,false)){ //если находится то переходим к функции добавления предмета в ячейку if (Empty[a]=="0"){ Empty[a]="1"; AddToBox(NameP2,["box"+a])} //иначе обращаемся к функции возвращающей предмет на его начальное положение else if (Empty[a]=="1"){ GoToStart(NameP2,["box"+a])} } /*-------------------------------------------------------------------------------*/ //Вот тут не могу догнать как сделать, мне нужно чтобы предмет при отпускании вне ячейки //обращался к функции, это условие полюбас выполняется (наверное из-за того что находится в цикле //если предмет не над ячейкой то переносим его в начальное положение else { GoToStart(NameP2,["box"+a])} /*-------------------------------------------------------------------------------*/ } } function AddToBox (NameP3,NameBox){ //Перенос предмета в нужную ячейку //Координаты предметов в ячейках if (NameBox=="box1"){ var ItemInBoxX:Number=259; ItemInBoxY=180; } //Координаты предмета в 1 ячейке ... else if (NameBox=="box6"){ ItemInBoxX=405; ItemInBoxY=253; } //Координаты предмета в 6 ячейке /*-------------------------------------------------------------------------------*/ //Почемуто величины ItemInBoxX и ItemInBoxX не задаются или задаются как то неправильно, //пробовал выводить их через Number(ItemInBoxX) и задавать в виде //var ItemInBoxX:Number=259 один фиг не работает :( //Помещаем предмет в ячейку NameP3._x=ItemInBoxX; NameP3._y=ItemInBoxY; /*-------------------------------------------------------------------------------*/ info="портфель "+NameP3+" добавлен в:"+NameBox+" Х="+ItemInBoxX+" Y="+ItemInBoxY; trace (info); stopDrag(); } function GoToStart(NameP4,NameBox2){ //Начальные координаты предметов - задам потом NameP4._x=0; NameP4._y=0; if (NameP4=="Portfel1"){ ItemX=0; ItemY=0; } //Начальные координаты 1 предмета ... else if (NameP4=="Portfel6"){ ItemX=0; ItemY=0; } //Начальные координаты 6 предмета //Помещаем предмет в его начальные координаты NameP4._x=ItemX; NameP4._y=ItemY; info2="Ячейка "+NameBox2+" занятa"+" Возвращаем "+NameP4+" в Х="+ItemX+" Y="+ItemY; trace (info2); stopDrag(); } Последний раз редактировалось vivado; 26.05.2011 в 17:00. |
|
|||||
Усложнять? Да там проще некуда. Причем ни о какой ЯВЕ там вообще ни слова. Это флэшовый пак.
|
Часовой пояс GMT +4, время: 21:41. |
|
« Предыдущая тема | Следующая тема » |
Теги |
dragDrop , hittest , перетаскивания |
|
|