Просмотр полной версии : проблема с hitTest()
MasteR'ok
05.01.2008, 13:09
Вообщем есть у меня исходник, но не могу сделать одну вещь.
При выстреле у чела из пушки появляется лёд. Нужно сделать так,
чтобы при выстреле, если лёд попал на врага, то он исчезал.
Но никак не могу сделать, чтобы он исчезал при попадании на него
льда, а не всей модели игрока.:wacko:
Помогите люди добрые.....:)
P.S не пинайте сильно, исходник на Flash 6))))
koIIImarik
05.01.2008, 15:28
Если вам это как-то поможет вот урок об использовании hitTest во Flash (http://www.flashist.ru/2007/12/21/stolknovenie-obektov-vo-flash-1/).
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
Исправил кое-как, сразу скажу хреново, единственное, чтобы показать, как оно должно работать, и к чему цеплять. В исходнике идёт перебор всех "врагов" и проверка на hitTest со льдом для каждого из них.
Кошмар:eek:................... ладно я баламутина но ведь вы новое поколение, кто же так кодит, тут всё переделывать нужно иначе в дальнейшем концов ненайдёте
P.S. При всём моём уважении но даже я обалдел:wacko:
P.S.2 Какой "hitTest" со льдом ? а прицел зачем ? ведь это автомат а не сабелька
так учат книшки... (особенно морально устаревшие;)
MasteR'ok
07.01.2008, 17:35
D12, зачем прицел. затем, потому что поворачивается чел относительно него, ты попробуй его убери, и я посмотрю на тебя)))) кодил не я, а спёр пример с сайта, прост немного переделал под себя.
лучше чем всё это говорить, помог бы с проблемой!(
комарик, что-то не открывается файл твой! запускаю, открывается flash, и вылетает, что "обнаружена ошибка, приложение будет закрыто". macromedia flash 2004 тож не открывает ("unexpeted file format"), ну это и понятно.
MasteR'ok а зачем вам вращатся относительно курсора мышки ?
если вы скажете подробненько от А до Я что вы хотите создать то я вам помогу а так я непонимаю вашей логики в создании этой игрушки с непонятными пробелами
D12, зачем прицел. затем, потому что поворачивается чел относительно него, ты попробуй его убери, и я посмотрю на тебя))))
запросто уберу и при этом вращение останется, вы хотите сделать "Кримсслоад" вроде так называется ?
MasteR'ok
07.01.2008, 20:40
D12... убрать то можна, и вращаться он будет, но трудно таким образом управлять игроком (ты всё-таки попробуй удалить и потом поиграть))).
ну а что мне нужно? надо чтобы при выстреле проверялось не попал ли лёд из пушки на противника, и если да, то противник (это такие зелёные головы ползущие со всех сторон) исчезал (и если можно, то плавно, т.к. у меня не получилось сделать работоспособным этот момент=)). но все мои попытки привели к тому, что почему-то если при выстреле лёд попадал на противника, то он исчезал (но!), но потом все кто подходил к игроку тоже пропадали. не очень то весело..
на сим смею завершить мой рассказ для D12, искренне надеюсь что изъяснил всё понятно и "от А до Я"
MasteR'ok завтра постораюсь (очень, очень) выложить один пример, на основе которого и попробуем решить вашу потребность, годится ?
MasteR'ok
09.01.2008, 12:16
D12, конечно годится) вот только надо по-быстрее, до 14 желательно ;-)
Доброй ночи
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);
//////
//////
//////
//////
//////
//////
Но тут еще много работы я еще непостроил коллизию и прочее прочее прочее
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???
mx.utils.Delegate - Выполнение функции в заданной области видимости с передачей параметров
Как раз без передачи параметров. :)
Волгоградец
18.01.2008, 12:44
Спасибо.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.