Форум 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=106176)

MasteR'ok 05.01.2008 13:09

проблема с hitTest()
 
Вложений: 1
Вообщем есть у меня исходник, но не могу сделать одну вещь.
При выстреле у чела из пушки появляется лёд. Нужно сделать так,
чтобы при выстреле, если лёд попал на врага, то он исчезал.
Но никак не могу сделать, чтобы он исчезал при попадании на него
льда, а не всей модели игрока.:wacko:

Помогите люди добрые.....:)

P.S не пинайте сильно, исходник на Flash 6))))

koIIImarik 05.01.2008 15:28

Если вам это как-то поможет вот урок об использовании hitTest во Flash.

MasteR'ok 05.01.2008 17:18

спасиб за ответ) но эт я и так знаю)) проблема больше не в команде, а в её "хитрой" реализации:)

koIIImarik 05.01.2008 17:49

Ну вы просто делаете hitTest не для картинки/объекта льда, а для объекта ИГРОКА, по всей видимости.

MasteR'ok 07.01.2008 00:56

если не трудна, можно это сделать в выложенном исходнике и перезалить? потому что работает, но не так как надо(

koIIImarik 07.01.2008 02:35

Вложений: 1
Исправил кое-как, сразу скажу хреново, единственное, чтобы показать, как оно должно работать, и к чему цеплять. В исходнике идёт перебор всех "врагов" и проверка на hitTest со льдом для каждого из них.

D12 07.01.2008 04:13

Кошмар:eek:................... ладно я баламутина но ведь вы новое поколение, кто же так кодит, тут всё переделывать нужно иначе в дальнейшем концов ненайдёте

P.S. При всём моём уважении но даже я обалдел:wacko:
P.S.2 Какой "hitTest" со льдом ? а прицел зачем ? ведь это автомат а не сабелька

MrPoma 07.01.2008 04:39

так учат книшки... (особенно морально устаревшие;)

MasteR'ok 07.01.2008 17:35

D12, зачем прицел. затем, потому что поворачивается чел относительно него, ты попробуй его убери, и я посмотрю на тебя)))) кодил не я, а спёр пример с сайта, прост немного переделал под себя.

лучше чем всё это говорить, помог бы с проблемой!(

комарик, что-то не открывается файл твой! запускаю, открывается flash, и вылетает, что "обнаружена ошибка, приложение будет закрыто". macromedia flash 2004 тож не открывает ("unexpeted file format"), ну это и понятно.

D12 07.01.2008 19:07

MasteR'ok а зачем вам вращатся относительно курсора мышки ?
если вы скажете подробненько от А до Я что вы хотите создать то я вам помогу а так я непонимаю вашей логики в создании этой игрушки с непонятными пробелами




Цитата:

D12, зачем прицел. затем, потому что поворачивается чел относительно него, ты попробуй его убери, и я посмотрю на тебя))))
запросто уберу и при этом вращение останется, вы хотите сделать "Кримсслоад" вроде так называется ?

MasteR'ok 07.01.2008 20:40

D12... убрать то можна, и вращаться он будет, но трудно таким образом управлять игроком (ты всё-таки попробуй удалить и потом поиграть))).


ну а что мне нужно? надо чтобы при выстреле проверялось не попал ли лёд из пушки на противника, и если да, то противник (это такие зелёные головы ползущие со всех сторон) исчезал (и если можно, то плавно, т.к. у меня не получилось сделать работоспособным этот момент=)). но все мои попытки привели к тому, что почему-то если при выстреле лёд попадал на противника, то он исчезал (но!), но потом все кто подходил к игроку тоже пропадали. не очень то весело..

на сим смею завершить мой рассказ для D12, искренне надеюсь что изъяснил всё понятно и "от А до Я"

D12 08.01.2008 23:22

MasteR'ok завтра постораюсь (очень, очень) выложить один пример, на основе которого и попробуем решить вашу потребность, годится ?

MasteR'ok 09.01.2008 12:16

D12, конечно годится) вот только надо по-быстрее, до 14 желательно ;-)

D12 15.01.2008 01:17

Вложений: 1
Доброй ночи
MasteR'ok
я правдо занимаюсь вашей задачей тоько медленно если у вас позволяет время я потихочечку доделаю игру
мне правдо стыдно за задержки


Код:

var tank:Object = new Object();
tank.__go = 2;
tank.__rad = 180/Math.PI;
tank.__di = Math.sqrt(tank.__go, 1/3);
tank__controll = 0;
///
///
function tank_move():Void {
        tank__controll = 0;
        if (Key.isDown(Key.UP)) {
                tank__controll = 1;
        }
        if (Key.isDown(Key.DOWN)) {
                tank__controll = 2;
        }
        if (Key.isDown(Key.LEFT)) {
                tank__controll = 3;
        }
        if (Key.isDown(Key.RIGHT)) {
                tank__controll = 4;
        }
        if (Key.isDown(Key.UP) && Key.isDown(Key.LEFT)) {
                tank__controll = 5;
        }
        if (Key.isDown(Key.UP) && Key.isDown(Key.RIGHT)) {
                tank__controll = 6;
        }
        if (Key.isDown(Key.DOWN) && Key.isDown(Key.LEFT)) {
                tank__controll = 7;
        }
        if (Key.isDown(Key.DOWN) && Key.isDown(Key.RIGHT)) {
                tank__controll = 8;
        }
        //               
        if (tank__controll == 1) {
                tank_baza._y -= tank.__go;
        }
        if (tank__controll == 2) {
                tank_baza._y += tank.__go;
        }
        if (tank__controll == 3) {
                tank_baza._x -= tank.__go;
        }
        if (tank__controll == 4) {
                tank_baza._x += tank.__go;
        }
        if (tank__controll == 5) {
                tank_baza._x -= tank.__di;
                tank_baza._y -= tank.__di;
        }
        if (tank__controll == 6) {
                tank_baza._x += tank.__di;
                tank_baza._y -= tank.__di;
        }
        if (tank__controll == 7) {
                tank_baza._x -= tank.__di;
                tank_baza._y += tank.__di;
        }
        if (tank__controll == 8) {
                tank_baza._x += tank.__di;
                tank_baza._y += tank.__di;
        }
        //                 
        tank_xm = Math.floor(_xmouse);
        tank_ym = Math.floor(_ymouse);
        q = tank_xm-tank_baza._x;
        z = tank_ym-tank_baza._y;
        tank_baza._rotation = 0-Math.floor(Math.atan2(q, z)*tank.__rad);
        //
        tank_zone._x = _xmouse;
        tank_zone._y = _ymouse;
        tank_zone._rotation += 2;
        //
        updateAfterEvent();
        //
}
setInterval(tank_move, 12);
//////
//////
//////
//////
//////
//////


D12 17.01.2008 00:20

Вложений: 1
Но тут еще много работы я еще непостроил коллизию и прочее прочее прочее



Код:

import flash.display.*;
//////
//////
//////
//////
//////
//////
var tank:Object = new Object();
tank.__go = 2;
tank.__rad = 180/Math.PI;
tank.__di = Math.sqrt(tank.__go, 1/3);
tank__controll = 0;
tank_zone_go = 2;
///
///
function tank_move():Void {
        tank__controll = 0;
        if (Key.isDown(Key.UP)) {
                tank__controll = 1;
        }
        if (Key.isDown(Key.DOWN)) {
                tank__controll = 2;
        }
        if (Key.isDown(Key.LEFT)) {
                tank__controll = 3;
        }
        if (Key.isDown(Key.RIGHT)) {
                tank__controll = 4;
        }
        if (Key.isDown(Key.UP) && Key.isDown(Key.LEFT)) {
                tank__controll = 5;
        }
        if (Key.isDown(Key.UP) && Key.isDown(Key.RIGHT)) {
                tank__controll = 6;
        }
        if (Key.isDown(Key.DOWN) && Key.isDown(Key.LEFT)) {
                tank__controll = 7;
        }
        if (Key.isDown(Key.DOWN) && Key.isDown(Key.RIGHT)) {
                tank__controll = 8;
        }
        //                                                                                   
        if (tank__controll == 1) {
                tank_baza._y -= tank.__go;
        }
        if (tank__controll == 2) {
                tank_baza._y += tank.__go;
        }
        if (tank__controll == 3) {
                tank_baza._x -= tank.__go;
        }
        if (tank__controll == 4) {
                tank_baza._x += tank.__go;
        }
        if (tank__controll == 5) {
                tank_baza._x -= tank.__di;
                tank_baza._y -= tank.__di;
        }
        if (tank__controll == 6) {
                tank_baza._x += tank.__di;
                tank_baza._y -= tank.__di;
        }
        if (tank__controll == 7) {
                tank_baza._x -= tank.__di;
                tank_baza._y += tank.__di;
        }
        if (tank__controll == 8) {
                tank_baza._x += tank.__di;
                tank_baza._y += tank.__di;
        }
        //                                                                                     
        tank_xm = Math.floor(_xmouse);
        tank_ym = Math.floor(_ymouse);
        q = tank_xm-tank_baza._x;
        z = tank_ym-tank_baza._y;
        tank_baza._rotation = 0-Math.floor(Math.atan2(q, z)*tank.__rad);
        //
        tank_zone._x = _xmouse;
        tank_zone._y = _ymouse;
        tank_zone._rotation += tank_zone_go;
        //
        updateAfterEvent();
        //
}
setInterval(tank_move, 12);
//////
//////
//////
//////
//////
//////
var Go:Array = [1, 2, 3];
var attack:Array = [3, 5, 6];
var aliens:Object = new Object();
aliens.__go = 2;
aliens.__angle = Math.PI/180;
aliens.__number = 3;
aliens.__max = 20;
///
var w:Number = 0;
var i:Number = 0;
function onEnterFrame():Void {
        while (i<aliens.__number) {
                var alien:MovieClip = this.createEmptyMovieClip("alien"+i, i);
                alien.attachMovie("alien", "alien", 1);
                alien._x = 50;
                alien._y = 10+i*50;
                alien.__e = Go[random(Go.length)];
                //
                alien.onEnterFrame = mx.utils.Delegate.create(alien, onAlienEnterFrame);
                i += 1;
        }
        w += 1;
        if (w>=120) {
                if (aliens.__number<=aliens.__max) {
                        aliens.__number = aliens.__number+attack[random(attack.length)];
                }
                w = 0;
        }
}
function onAlienEnterFrame():Void {
        alien__x = this._x-tank_baza._x;
        alien__y = this._y-tank_baza._y;
        alien__rotation = -Math.atan2(alien__x, alien__y)/aliens.__angle+90;
        this._y = this._y-this.__e*Math.sin(alien__rotation*aliens.__angle);
        this._x = this._x-this.__e*Math.cos(alien__rotation*aliens.__angle);
        this._rotation = alien__rotation-90;
        //if (this.hitTest(line._x, line._y, true)) {
        //this.unloadMovie();
       




               
        //   
        updateAfterEvent();
        //
}
//////
//////
//////
//////
//////
//////
var mouse:Object = new Object();
mouse__controll = 0;
onMouseDown = function () {
        tank_zone_go = 7;
        mouse__controll = 1;
};
onMouseUp = function () {
        tank_zone_go = 2;
        mouse__controll = 0;
        line.removeMovieClip();
};
///
///
var line_attack:Object = new Object();
line_attack.__height = 2;
function mouse_move():Void {
        line_attack.__height = Math.sqrt(Math.pow(tank_baza._x-tank_zone._x, 2)+Math.pow(tank_baza._y-tank_zone._y, 2));
        if (mouse__controll == 1) {
                createEmptyMovieClip("line", aliens.__number+1);
                line.lineStyle(0.25, 0x000000);
                line.moveTo(0, 0);
                line.lineTo(0, line_attack.__height);
                endFill();
                line._rotation = tank_baza._rotation;
                line._x = tank_baza._x;
                line._y = tank_baza._y;
        }
        //                                       
        updateAfterEvent();
        //
}
setInterval(mouse_move, 12);
///
///
///
///


Волгоградец 17.01.2008 13:56

D12, если не сложно, объясни эту строчку:
Код:

alien.onEnterFrame = mx.utils.Delegate.create(alien, onAlienEnterFrame);
Что такое mx.utils.Delegate.create???

D12 18.01.2008 00:12

mx.utils.Delegate - Выполнение функции в заданной области видимости с передачей параметров

iNils 18.01.2008 01:34

Как раз без передачи параметров. :)

Волгоградец 18.01.2008 12:44

Спасибо.


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

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