Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.06.2022, 17:51
Alexey25 вне форума Посмотреть профиль Отправить личное сообщение для Alexey25 Найти все сообщения от Alexey25
  № 1  
Ответить с цитированием
Alexey25

Регистрация: Mar 2016
Сообщений: 34
По умолчанию Не работает hitTestPoint

Решил сделать платформер на flash, столкнулся с проблемой что hitTestPoint не работает. В чем может быть проблема?

Герой у меня создается с помощью графики “graphics”.

P.S. Честно говоря не помню какая там проблема была, уже сталкивался с ней очень давно, сейчас позабыл.

Вот пример hitTestPoint:
Код AS3:
	if (platform1.hitTestPoint(shape.x, shape.y) && !jumpsetup) 
        {
 
			shape.x = platform1.x;
			onground = true;
            jumping = false;
            var i = 0;
            var objy = Math.floor(y1);
 
 
 
		}
А вот полностью код:
Код AS3:
var shape:Sprite = new Sprite();
var x1 = 0;
var y1 = 0;
var dx = 0;
var dy = 0;
var jumpsetup = false;
var onground = false;
var jumping = false;
var shooting = false;
var left_key_down: Boolean = false;
var right_key_down: Boolean = false;
var jump_key_down: Boolean = false; 
function createHero()
{
 
 
shape.graphics.lineStyle(1, 0x000000, 1);
shape.graphics.beginFill(0x00FFFF, .5);
shape.graphics.drawCircle(0, 0, 20);
shape.x = 150;
shape.y = 150;
 
addChild(shape);
}
 
 
 
function init()
{
	createHero();
	stage.addEventListener(Event.ENTER_FRAME, onEnterFrame1);
	stage.addEventListener( KeyboardEvent.KEY_DOWN, on_keydown);
	stage.addEventListener( KeyboardEvent.KEY_UP, on_keyup);
}
function on_keydown( e : KeyboardEvent ) : void {
  //LEFT Key
  if (e.keyCode == 37) {
    left_key_down = true;
  }
  //RIGHT Key
  else if (e.keyCode == 39) {
    right_key_down = true;
  }
  //Up Key
  else if (e.keyCode == 38) {
    jump_key_down = true;
  }
}
function on_keyup( e : KeyboardEvent ) : void {
  //LEFT Key
  if (e.keyCode == 37) {
    left_key_down = false;
  }
  //RIGHT Key
  else if (e.keyCode == 39) {
    right_key_down = false;
  }
  //Up Key
  else if (e.keyCode == 38) {
    jump_key_down = false;
  }
}
 
function onEnterFrame1(evn:Event)
{
 
	dy = dy + 0.5;
	var y1 = Math.ceil(shape.y + dy);
 
	onground = false;
	if (dy >= 0) 
    {
		trace(shape.y);
		if (platform1.hitTestPoint(shape.x, shape.y) && !jumpsetup) 
        {
 
			shape.x = platform1.x;
			onground = true;
            jumping = false;
            var i = 0;
            var objy = Math.floor(y1);
 
 
 
		}
		else
		{
			if (dy > 5 && !shooting) 
            {
 
            }
		}
	}
	else
	{
 
 
	}
	if (dy > 9) 
    {
        dy = 9;
    }
	if (!jumpsetup) 
    {
        shape.x = shape.x + dx;
        shape.y = shape.y + dy;
    }
	if (right_key_down) {
	   if (jumping) 
        {
            dx = dx + 0.4;
        }
        else 
        {
            dx = dx + 1;
        }
	}
	else
	{
		if (left_key_down && !shooting) 
        {
            if (jumping) 
            {
                dx = dx - 0.4;
            }
            else 
            {
                dx = dx - 1;
            }
 
        }
        else 
        {
            dx = dx * 0.7;
        }
	}
	if (dx > 7) 
    {
        dx = 7;
    }
    if (dx < -7) 
    {
        dx = -7;
    }
	if (!jumpsetup && !jumping && !shooting && onground) 
    {
        if (Math.abs(dx) < 0.5) 
        {
            dx = 0;
		}
        else 
        {
           dy = -9;
		   jumpsetup = false;
        }
    }
	if (jump_key_down && dy >= 0 && dy < 1 && !jumping) 
    {
		trace("dawad2");
        onground = false;
        shooting = false;
        jumping = true;
        jumpsetup = true;
 
    }
	shape.x = Math.floor(shape.x);
    shape.y = Math.floor(shape.y);
}
init();

Старый 28.06.2022, 03:13
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Ваш код не запускал, но:
1. Я не вижу, где вы заполняете спрайт platform1 контентом, он у вас пустой? Тогда ясное дело, что результатом проверки любой точки будет отсутствие пересечения.

И так ещё:
1. Вычисление условия в if происходит слева на право и прерывается, если результат условия уже известен до его полного вычисления. Для повышения производительности лучше простые проверки выполнять первыми (сделать сравнение с флагом: jumpsetup до вызова hitTestPoint)
2. Делать физику на простых хит тестах не очень удобно, был клёвый 2д физ. движок - Nape;
3. Не забываем читать доку по API, она даже на русском.
__________________
Дети не должны знать о своих родителях

Старый 09.07.2022, 14:28
Alexey25 вне форума Посмотреть профиль Отправить личное сообщение для Alexey25 Найти все сообщения от Alexey25
  № 3  
Ответить с цитированием
Alexey25

Регистрация: Mar 2016
Сообщений: 34
Спасибо за библиотеку Nape, буду изучать. У этой библиотеки закрытый исходный код, а то я на сайте обнаружил вместо .as формат .swc?

Хотелось бы посмотреть как библиотека работает изнутри (исходный код).

Старый 19.07.2022, 19:56
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 4  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Он написан на Haxe, исходник тут. Это такой язык, который транслируется в JS, AS3, PHP и т.д.
Но для вас это не имеет особого значения, вы просто подключаете SWC и используете его классы у себя в AS3 как обычно.
__________________
Дети не должны знать о своих родителях

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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