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

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

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

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

При столкновении двух шаров один отскакивает на несколько пикселе. Например первый шар это герой второй противник. Герой перемещается к противнику и когда он с ним сталкивается то противник почему-то отскакивает.
Вот код, подскажите пожалуйста в чем может быть проблема? На всякий случай я прикрепил исходный файл. ball.rar
Код AS3:
import flash.events.Event;
 
import flash.events.KeyboardEvent;
 
var b1:ball1;
var b2:ball2;
var dist_x, dist_y, minDist, distance;
var midpointX, midpointY;
var up, left, right, down;
 
createBalls();
var accelerator = 5;
function createBalls ()
{
			b1 = new ball1();
			addChild(b1);
			b1.x = 300;
			b1.y = 100;
			b1.speedx = b1.x;
			b1.speedy = b1.y;
			b2 = new ball2();
			addChild(b2);
			b2.x = 100;
			b2.y = 100;
			b1.addEventListener(Event.ENTER_FRAME, onEF);
 
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
			stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
}
function onKD(e:KeyboardEvent)
{
 
	if(e.keyCode==87)
	{
		up = true;
	}
	if(e.keyCode==83)
	{
		down = true;
	}
	if(e.keyCode==65)
	{
		left = true;
	}
	if(e.keyCode==68)
	{
		right = true;
	}
}
function onKU(e:KeyboardEvent)
{
	if(e.keyCode==87)
	{
		up = false;
	}
	if(e.keyCode==83)
	{
		down = false;
	}
	if(e.keyCode==65)
	{
		left = false;
	}
	if(e.keyCode==68)
	{
		right = false;
	}
}
 
function onEF(e:Event)
{
	var bl:ball1 = e.currentTarget as ball1;
 
 
	if(up)
	{
		bl.speedy -= accelerator;
	}
	if(left)
	{
		bl.speedx -= accelerator;
	}
	if(down)
	{
		bl.speedy += accelerator;
	}
	if(right)
	{
		bl.speedx += accelerator;
	}
 
	dist_x = b2.x-bl.x;
	dist_y = b2.y-bl.y;
 
	minDist = (bl.width + b2.width) / 2;
 
	distance = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
 
	var normalX = dist_x / distance;
	var normalY = dist_y / distance;
 
	if (distance < minDist)
	{
 
		midpointX = (bl.x+b2.x)/2;
		midpointY = (bl.y+b2.y)/2;
 
		minDist = minDist - b2.width/2; //50
 
		b2.x = (midpointX+normalX*minDist);
		b2.y = (midpointY+normalY*minDist);
 
	}
	bl.x = bl.speedx;
	bl.y = bl.speedy;
}

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

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

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


 


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


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