PDA

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


vitlance
02.04.2007, 14:40
Для некоторых вопрос покажетса смешным, и простым.. Но т.к как я делаю всё без классов незнаю как же запустить вот этот класс:

class htest.Sprite extends MovieClip {

public function Sprite() {
super();
}

private function getMax(arr:Array):Number {
var max:Number = arr[0];
for(var i:Number = 1; i<arr.length; i++)
if(arr[i]>max) max = arr[i];
return max;
}

private function getMin(arr:Array):Number {
var min:Number = arr[0];
for(var i:Number = 1; i<arr.length; i++)
if(arr[i]<min) min = arr[i];
return min;
}

private function getOverlayArea(target:Sprite):Array {
var area:Array = []; area[0] = {}; area[1] = {};
area[0].x = getMax([this._x,target._x]);
area[0].y = getMax([this._y,target._y]);
area[1].x = getMin([this._x+this._width,target._x+target._width]);
area[1].y = getMin([this._y+this._height,target._y+target._height]);
return area;
}

public function overlayTest(target:Sprite):Boolean {
var overlay:Boolean = false;
if(this.hitTest(target)){
var area:Array = getOverlayArea(target);
var step:Number = 1;
var y:Number = area[0].y;
while(y<area[1].y){
y+=step;
var x:Number = area[0].x;
while(x<area[1].x){
var test1:Boolean = this.hitTest(x,y,true);
var test2:Boolean = target.hitTest(x,y,true);
if(test1 && test2){
overlay = true;
return overlay;
}
x+=step;
}
}
}
return overlay;
}

}

Это класс который проверяет hittest контура любой фигуры... Я хочу чтобы он работал в моей флэшки.. Т.е чтобы я отовсюду мог вызывать функцию overlayTest ... чтобы он работал вот так:
if (mc1.overlayTest(mc2)){
trace("ura");}

CorC
02.04.2007, 18:02
нужно у определенного мувика в библиотеке
прописать в "AS 2.0 Class" что в linkage
имя этого класса "htest.Sprite" или как там,
а потом в коде после аттача можно будет
делать то что вы написали

vitlance
02.04.2007, 21:15
окей... но это токо для одного обьекта... А если обьектов 1000, как задать класс глобально,для всего мува?

iNils
03.04.2007, 01:52
То есть, вы хотите, чтобы все клипы в библиотеки использовали один класс, но не писать доя всеъ это в ручную?

vitlance
03.04.2007, 07:00
именно

iNils
03.04.2007, 15:08
var selItems = fl.getDocumentDOM().library.getSelectedItems();
var className = "htest.Sprite";
for (var i=0; i<selItems.length; i++){
if (selItems[i].itemType != "folder") {
var str = selItems[i].name.split ("/");
var nm = str[str.length - 1];
var id = fl.getDocumentDOM().library.findItemIndex(nm);
fl.getDocumentDOM().library.items[id].linkageExportForAS = true;
fl.getDocumentDOM().library.items[id].linkageIdentifier = nm;
fl.getDocumentDOM().library.items[id].linkageClassName = className;
}
}Сохраните этот скрипт JSFL, указав в качесте className нужное имя класса с пакетом, поэтом в библиотеке выбрать необходимые клипы и запустить срипт Commands > Run Command...
Единственный не приятный момент, что визуально в библиотеке ничего не происходит, поэтому стоит выбрать один элемент, и выбрать его Linkage и нажать потом Ok, после чего у всех выбранных ранее элементов, в библиотеке появится имя линка.

vitlance
03.04.2007, 16:00
ОтличнО!! Спасибо большое!