Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проверка HitTest (http://www.flasher.ru/forum/showthread.php?t=117997)

Agent007 12.11.2008 14:16

Проверка HitTest
 
Вложений: 1
Здравствуйте, помогите пожалуйста разобраться
есть класс выстрела
Код:

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

проблема в этом
Код AS1/AS2:

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

Код AS1/AS2:

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

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


Часовой пояс GMT +4, время: 14:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.