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

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

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

Регистрация: Nov 2007
Сообщений: 10
По умолчанию Воздушный шарик средствами AS

Здраствуйте. Столкнулся с проблемой, возможно обсуждавшейся на форуме, но к сожалению не смог найти что-то конкретное.

Задача создать воздушный шарик, который будет себе свободно летать в указаной зоне, и при касании его мышкой он должен как бы отскакивать от курсора (эффект как будто его подбивают рукой).

Само програмирование мне чуток сложно для понимания, но кое-как написал строчки для рандомного движения шарика, а вот чтобы он отбивался от курсора, попытки закончились неудачей.
Вот код (mc - тот самый шарик):
Код:
function randRange(min:Number, max:Number):Number {
    var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
    return randomNum;
}


speed = 1;
movx = 'right';
movy = 'up';
mc._x = 0;
mc._y = 0;
onEnterFrame = function () {
	var borderX:Number = randRange(0, 1500);
	var borderY:Number = randRange(0, 1400);
	
	if (mc._x == 0) {
		movx = 'right';
	}
	if (mc._x == 550 or mc._x>=borderX*2) {
		movx = 'left';
	}
	if (mc._y == 0) {
		movy = 'down';
	}
	if (mc._y == 400 or mc._y>=borderY*3) {
		movy = 'up';
	}
	if (movx == 'right') {
		mc._x += speed;
	}
	if (movx == 'left') {
		mc._x -= speed;
	}
	if (movy == 'down') {
		mc._y += speed;
	}
	if (movy == 'up') {
		mc._y -= speed;
	}
};
Товарищи флешеры помогите пожалуйста решить проблему. Буду очень признателен за совет или давно написаный код.

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Кода нет, есть совет:
Код:
ball.onRollOver = function ():Void{
   this._y -= 10;
}
ball - имя шарика.
onRollOver - этот метод срабатывает, когда наводишь мышью на клип.

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

Регистрация: Nov 2007
Сообщений: 10
Спасибо за столь быстрый ответ.

Функция onRollOver само собой, но в даном случае шарик прыгнет по _у в верх.
Но нужен учет положения курсора по _х. Если он слева от шарика, значит при наведении должен уходить в право, если курсор справа, тогда влево.

Вот моя очередная попытка, но в даном случае отслеживается положение курсора относительно самого клипа, но никак не при наведении.

Код:
function randRange(min:Number, max:Number):Number {
	var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
	return randomNum;
}


speed = .2;
movx = 'right';
movy = 'up';
mc._x = 200;
mc._y = 200;
onEnterFrame = function () {
	var borderX:Number = randRange(0, 1500);
	var borderY:Number = randRange(0, 1400);
	if (mc._x == 0) {
		movx = 'right';
	}
	if (mc._x == 550 or mc._x>=borderX*2) {
		movx = 'left';
	}
	if (mc._y == 0) {
		movy = 'down';
	}
	if (mc._y == 400 or mc._y>=borderY*3) {
		movy = 'up';
	}
	if (movx == 'right') {
		mc._x += speed;
	}
	if (movx == 'left') {
		mc._x -= speed;
	}
	if (movy == 'down') {
		mc._y += speed;
	}
	if (movy == 'up') {
		mc._y -= speed;
	}
};
mc.onRollOver = function() {
onEnterFrame = function() {

		if (_xmouse<=mc._x) {
			mc._x += 2;
	};
			if (_xmouse>=mc._x) {
			mc._x -= 2;
	};
			if (_ymouse<=mc._y) {
			mc._y += 2;
	};
			if (_ymouse>=mc._y) {
			mc._y -= 2;
	};
};
};
Не знаю, может я избрал не совсем верный путь для реализации или не правильно использовал код.

Старый 10.04.2008, 15:41
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 4  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Код:
ball.onRollOver = function ():Void{
   var iks:Number = this._x - _root._xmouse;
   var igr:Number = this._y - _root._ymouse;
   this._x += iks;
   this._y += igr;
}

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

Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
Я бы считал и сохранял где-то вектор перемещения курсора, т.е. направление и скорость. Ну и в зависимости от длины и направления этого вектора пинал шарик.

Старый 10.04.2008, 22:41
Leeto вне форума Посмотреть профиль Отправить личное сообщение для Leeto Найти все сообщения от Leeto
  № 6  
Ответить с цитированием
Leeto

Регистрация: Nov 2007
Сообщений: 10
Хм, знать бы как это реализовать. Я думал о варианте проще, - что при самом наведении курсора, клип отскакивал в противоположную сторону от курсора, значит отсчитывать позицию курсора непосредственно при наведении. Но и тут силенок не хватило.

Старый 11.04.2008, 00:55
NoCD вне форума Посмотреть профиль Отправить личное сообщение для NoCD Найти все сообщения от NoCD
  № 7  
Ответить с цитированием
NoCD
 
Аватар для NoCD

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
попробуй вычеслить угол, когда курсор оказывается внутри шарика хотя бы hitTest-ом.

Старый 11.04.2008, 06:08
$mival вне форума Посмотреть профиль Отправить личное сообщение для $mival Найти все сообщения от $mival
  № 8  
Ответить с цитированием
$mival
 
Аватар для $mival

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
почитай hitTest, там есть пересечение объекта с курсором.

а скорость легко вычисляется путем сохранения предыдущих координат мыши и сравнением их с текущими.
__________________
smival.com

Старый 11.04.2008, 12:16
Leeto вне форума Посмотреть профиль Отправить личное сообщение для Leeto Найти все сообщения от Leeto
  № 9  
Ответить с цитированием
Leeto

Регистрация: Nov 2007
Сообщений: 10
Спасибо. Буду пробовать.

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

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

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


 


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


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