PDA

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


Agent007
12.11.2008, 14:16
Здравствуйте, помогите пожалуйста разобраться
есть класс выстрела
class Vistrel {
//Propertis
var att_mc:String;
var cel_mc:MovieClip;
var speed_vis:Number;
private var __pulanum:Number;
var value_tan_krot:Number;
var pula:MovieClip;
//Propertis

function Vistrel(p_att_mc:String, p_cel_mc:MovieClip, p_speed_vis:Number, p_pulanum:Number) {
this.__pulanum = p_pulanum
att_mc = p_att_mc
cel_mc = p_cel_mc

_root.attachMovie(att_mc, att_mc+this.__pulanum, _root.getNextHighestDepth(), {_x:cel_mc._x, _y:cel_mc._y});

pula = _root[att_mc+this.__pulanum]
pula._rotation = cel_mc._rotation;
pula.value_tan_krot = cel_mc._rotation;
pula.speed_vis = p_speed_vis
pula.onEnterFrame = function() {
this._x -= Math.sin(Math.PI/180*(180-this.value_tan_krot))* this.speed_vis;
this._y -= Math.cos(Math.PI/180*(180-this.value_tan_krot))* this.speed_vis;
}
}
public function get pulanum():Number {
return this.__pulanum;
}
public function set pulanum(value:Number):Void {
this.__pulanum = value;
}


}

И во флешки

var my_array:Array = new Array();
var my_pula:MovieClip = new MovieClip;

for (var i:Number = 0; i<5; i++) {
my_array.push (_root.attachMovie('monst', 'monst'+i, _root.getNextHighestDepth(), {_x:(150*i)+50, _y:50}));
}

var mouseListener:Object = new Object();
mouseListener.onMouseDown = function() {
var vistrel:Vistrel = new Vistrel("pula", bash, 15, _root.getNextHighestDepth());
my_pula = vistrel.pula
////////////////////////////////////////////
_root.onEnterFrame = function() {
len = my_array.length
for (var j:Number = 0; j<len; j++) {
if (my_pula.hitTest(my_array[j])) {
vistrel.pula.removeMovieClip();
my_array[j].removeMovieClip();
delete this;
my_array.sort();
my_array.shift();
}
}
}
////////////////////////////////////////////
}

mouseListener.onMouseMove = function() {
radians = Math.atan2 (_xmouse - bash._x, _ymouse - bash._y);
grad = -radians * 180 / Math.PI;
bash._rotation = grad;
updateAfterEvent();
};
Mouse.addListener(mouseListener);

Проблема в следущем при попадании пули в цель все замечательно отрабатывает, но если выпустить две пули подряд то срабатывает последняя, почему и как это побороть? Подскажите пожалуйста

Валиант
12.11.2008, 15:00
проблема в этом my_pula = vistrel.pula
Возможно нужно использовать массив

Agent007
12.11.2008, 15:22
Сделал так:
var my_monstr_array:Array = new Array();
var my_pula_array:Array = new Array();
var my_pula:MovieClip = new MovieClip;

for (var i:Number = 0; i<5; i++) {
my_monstr_array.push(_root.attachMovie('monst', 'monst'+i, _root.getNextHighestDepth(), {_x:(150*i)+50, _y:50}));
}

var mouseListener:Object = new Object();
mouseListener.onMouseDown = function() {
var vistrel:Vistrel = new Vistrel("pula", bash, 15, _root.getNextHighestDepth());
my_pula = vistrel.pula
my_pula_array.push (my_pula)

////////////////////////////////////////////
_root.onEnterFrame = function() {
len = my_monstr_array.length
len2 = my_pula_array.length
for (var g:Number = 0; g<len; g++) {
for (var j:Number = 0; j<len2; j++) {
if (my_pula_array[j].hitTest(my_monstr_array[g])) {
my_pula_array[j].removeMovieClip();
my_monstr_array[g].removeMovieClip();
delete my_monstr_array [g];
delete my_pula_array[j];
my_pula_array.sort();
my_pula_array.pop();
my_monstr_array.sort();
my_monstr_array.pop();
trace ("pula " + my_pula_array.length + " - " + "monster " + my_monstr_array.length)
}
}
}
for (var f:Number = 0; f<len2; f++) {
if (my_pula_array[f].hitTest(_root.kr_top)) {
my_pula_array[f].removeMovieClip();
delete this;
my_pula_array.sort();
my_pula_array.shift();
trace ("pula " + my_pula_array.length + " - " + "monster " + my_monstr_array.length)
}
}
}
////////////////////////////////////////////
}

mouseListener.onMouseMove = function() {
radians = Math.atan2 (_xmouse - bash._x, _ymouse - bash._y);
grad = -radians * 180 / Math.PI;
bash._rotation = grad;
updateAfterEvent();
};
Mouse.addListener(mouseListener);

Ох, чувствую перемудрил очень сильно

Валиант
12.11.2008, 15:34
var my_array:Array = new Array();
var my_pula:MovieClip = new MovieClip;
var id:Number = 0;
for (var i:Number = 0; i<5; i++) {
my_array.push (_root.attachMovie('monst', 'monst'+i, _root.getNextHighestDepth(), {_x:(150*i)+50, _y:50}));
}
var mouseListener:Object = new Object();
mouseListener.onMouseDown = function() {
var vistrel:Vistrel = new Vistrel("pula", bash, 15, _root.getNextHighestDepth());
id++;
my_pula[id] = vistrel.pula
len = my_array.length
_root.onEnterFrame = function() {
for (ii:Number=0;ii<id;ii++){
for (var j:Number = 0; j<len; j++) {
if (my_pula[ii+1].hitTest(my_array[j])) {
my_pula[ii+1].removeMovieClip();my_array[j].removeMovieClip();
delete this;
my_array.sort();my_array.shift();
}
}
}
}
}
mouseListener.onMouseMove = function() {
radians = Math.atan2 (_xmouse - bash._x, _ymouse - bash._y);
grad = -radians * 180 / Math.PI;
bash._rotation = grad;
updateAfterEvent();
};
Mouse.addListener(mouseListener);

Agent007
12.11.2008, 15:38
Валиант, спасибо большое за помощь, то что нужно))