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

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

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

Регистрация: Nov 2009
Сообщений: 176
По умолчанию отталкивание шара из шара

Добрый день!

Имеется на сцене два круглых мувика. Захватываем один мувик на курсор и тянем на другой при отпускании мышки второй должен оттолкнуть первый.

Как можно реализовать такое отталкивание?

Старый 07.06.2012, 15:35
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Это можно реализовать программированием захвата мувика курсором, программированием его движения и программированием столкновения и отскока мувиков.

Ну а если серьезно, покажите код, который у вас есть и объясните, что не получается.
__________________
hauts.ru

Старый 07.06.2012, 15:44
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 3  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Используйте физический движок Box2D или Nape
Лично мне больше нравится Box2D.

1. Создаете мир с нулевой гравитацией, два динамических круга c1 и c2.
2. Физические объекты привязываете к графике через свойство UserData
3. Привязываете графику к событиям мыши
4. При отпускании кнопки мыши рассчитываете силу импульса
5. Придаете импульс физическому объекту c1 с помощью метода ApplyImpulse
6. enjoy. остальное сделает Box2D
__________________
adobe AS3 manual

Старый 07.06.2012, 16:00
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
strangedk, зачем же такие сложности ради двух шариков? Это же совсем не рационально.

Wadimir вот вам простой пример, если я правильно понял вашу задачу:
Код AS3:
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.*;
 
function getBall(radius:Number):Sprite {
	var sprite:Sprite = new Sprite();
	var gr:Graphics = sprite.graphics;
	gr.lineStyle(1,0);
	gr.beginFill(0xFF0000,0.5);
	gr.drawCircle(0,0,radius);
	gr.endFill();
	return sprite;
}
 
var radius:int = 20;
var ball_1:Sprite = getBall(radius);
var ball_2:Sprite = getBall(radius);
 
addChild(ball_1);
addChild(ball_2);
 
ball_1.x = ball_1.y = 250;
ball_2.x = ball_2.y = 300;
 
ball_1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ball_1.addEventListener(Event.ENTER_FRAME, updateBallPosition);
 
var draging:Boolean = false;
var startDragX:Number;
var startDragY:Number;
var ballVx:Number = 0;
var ballVy:Number = 0;
var ballFriction = 0.9;// or bounce ?
 
function mouseDownHandler(e:MouseEvent):void {
	draging = true;
	ballVx = 0;
	ballVy = 0;
	startDragX = ball_1.mouseX;
	startDragY = ball_1.mouseY;
	stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
	stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
function mouseMoveHandler(e:MouseEvent):void {
	ball_1.x = stage.mouseX - startDragX;
	ball_1.y = stage.mouseY - startDragY;
	e.updateAfterEvent();
}
function mouseUpHandler(e:MouseEvent):void {
	draging = false;
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
	stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
	checkCollision();
}
function checkCollision():void {
	var dx:Number = ball_1.x - ball_2.x;
	var dy:Number = ball_1.y - ball_2.y;
	var dist:Number = Math.sqrt(dx * dx + dy * dy);
	var collisionDepth:Number = radius * 2 - dist;
	if (collisionDepth > 0) {
		var collisionAngle:Number = Math.atan2(dy,dx);// in radians
		ballVx = collisionDepth * Math.cos(collisionAngle);
		ballVy = collisionDepth * Math.sin(collisionAngle);
	}
}
 
function updateBallPosition(e:Event):void {
	if (draging) {
		return;
	}
	ball_1.x +=  ballVx;
	ball_1.y +=  ballVy;
	ballVx *=  ballFriction;
	ballVy *=  ballFriction;
}
__________________
hauts.ru

Старый 07.06.2012, 17:32
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 5  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Сообщение от Hauts Посмотреть сообщение
strangedk, зачем же такие сложности ради двух шариков? Это же совсем не рационально.
Не уверен я что там будет только два шарика.

Добавлено через 3 минуты
Насколько я понял - задача как в бильярде, чтобы ведущий шар мог ударить какой-то другой.
__________________
adobe AS3 manual

Старый 07.06.2012, 18:06
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 6  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
Цитата:
Сообщение от strangedk Посмотреть сообщение
Не уверен я что там будет только два шарика.
там будет именно два шарика.

Hauts, большое спасибо!!!

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

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

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


 


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


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