Я создаю пользовательскую карточную игру в формате XML и собираюсь создать колоду и сделать ее перетаскиваемой, чтобы пользователь мог перетаскивать их поверх другой карты.
Я выяснил, как собрать колоду и поместить несколько экземпляров фрагмента ролика, который находится в библиотеке, я просто не могу найти способ сделать каждую из карточек перетаскиваемой. То, что в данный момент происходит, это та карта сверху колоды, которая будет перетаскивать, даже если я нажму на карту под ней. Я исследовал setChildIndex()
, но не думаю, что использую его правильно.
Другая проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь щелкает по click_btn (названному только для тестирования), чтобы собрать колоду, для ее создания требуется время, может ли это быть ускорено?
Затем, когда пользователь нажимает первую карту, чтобы перетащить ее, наступает еще одно долгое ожидание?
Класс документа (CardGame.as)
package library
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class CardGame extends Sprite
{
/*
* variables
*/
private var _xml:XML;
private var _loader:URLLoader;
private var cardArray:Array;
private var activity:Activity;
/*
* constructor
*/
public function CardGame():void
{
_loader = new URLLoader();
_loader.addEventListene(Event.COMPLETE,buildArray);
_loader.load(new URLRequest("library/card.xml"));
click_btn.addEventListener(MouseEvent.CLICK,buildDeck);
}
/*
* metohods
*/
public function buildArray(e:Event):Array
{
cardArray = new Array();
_xml = new XML(_loader.data);
for(var i=0;i<_xml.card.length();i++)
{
if(_xml.card.face[i]=="activity")
{
cardArray.push({id:_xml.card.id[i],face:_xml.card.face[i],category:_xml.card.category[i],point:_xml.card.point[i],value:_xml.card.value[i]});
}
else if(_xml.card.face[i]=="event")
{
cardArray.push({id:_xml.card.id[i],face:_xml.card.face[i],category:_xml.card.category[i],point:_xml.card.point[i],value:_xml.card.value[i]});
}
else
{
trace("no card found");
}
}
return cardArray;
}
public function buildDeck(e:Event):void
{
for(var i=0;i<cardArray.length;i++)
{
if(cardArray[i].face == "activity")
{
activity = new Activity();
activity.x = 200;
activity.y = 150;
activity.id = i;
activity.name = "b"+i;
activity.buttonMode = true;
stage.addChild(activity);
activity.addEventListener(MouseEvent.MOUSE_DOWN,dragStart);
activity.addEventListener(MouseEvent.MOUSE_UP,dragStop);
}
}
}
public function dragStart(e:Event):void
{
activity.parent.setChildIndex(activity, numChildren - 1);
activity.startDrag();
}
public function dragStop(e:Event):void
{
this.stopDrag();
}
}
}
card.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<cardgame>
<card>
<id>1</id>
<face>activity</face>
<catagory>Task</catagory>
<point>2</point>
<value>Change the rule.</value>
</card>
<card>
<id>21</id>
<face>event</face>
<catagory>Injury</catagory>
<point>-2</point>
<value>Injury due to animal/snake/insect bite-count 3.</value>
</card>
</cardgame>
Файл xml на самом деле содержит 64 записи карточек действий и 41 карточку событий, но я сократил его, чтобы упростить.