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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.12.2010, 16:25
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 21  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Я хочу всё это понять на примере. Я вроде всё сделал, всё получается, шары поднимаются. Но как сделать, чтобы при задерживании кнопки шары летели вверх бесконечно, я не знаю.

Добавлено через 17 минут
Ау..?

Старый 06.12.2010, 16:54
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 22  
Ответить с цитированием
medvedya2
[+1 09.03.11]

Регистрация: Mar 2010
Сообщений: 128
Там надо коварять класс Ball, я не буду в его логике разбираться.

Старый 06.12.2010, 16:56
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 23  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Ладно, подожду кого-нибудь ещё... Просто это последние что я хотел добавить в дополнение к уроку. И тут проблема, которую уже не решить.

Старый 06.12.2010, 17:10
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 24  
Ответить с цитированием
medvedya2
[+1 09.03.11]

Регистрация: Mar 2010
Сообщений: 128
Вот, это должно работать, но это не лучший вариант
Код AS3:
import flash.display.Sprite;
import flash.text.*;
import flash.events.KeyboardEvent;
import flash.events.Event;
 
var speed:int = 20;
var dy:int = 0;
var dx:int = 0;
stage.addEventListener(MouseEvent.CLICK,addBall);
function addBall(e:MouseEvent):void
{
	var ball:Ball=new Ball();
	addChild(ball);
	ball.x = mouseX;
	ball.y = mouseY;
	myText.text = Ball.allBalls.length.toString();//Вывод длины массива в текст.
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);
function keyDown(e:KeyboardEvent):void
{
	trace(e.keyCode);
 
 
	if (e.keyCode == 37)
	{
		dx =  (-1)* speed;
	}
	if (e.keyCode == 38)
	{
		dy =  (-1)*  speed;
	}
	if (e.keyCode == 39)
	{
		dx =    speed;
	}
	if (e.keyCode == 40)
	{
		dy =    speed;
	}
 
 
 
}
stage.addEventListener(KeyboardEvent.KEY_UP,keyUp);
function keyUp(e:KeyboardEvent):void
{
	if (e.keyCode == 37)
	{
		dx = 0;
	}
	if (e.keyCode == 38)
	{
		dy = 0;
	}
	if (e.keyCode == 39)
	{
		dx = 0;
	}
	if (e.keyCode == 40)
	{
		dy = 0;
	}
 
 
}
this.addEventListener(Event.ENTER_FRAME,onFrame);
function onFrame(e:Event):void
{
 
	for (var i=0; i<Ball.allBalls.length; i++)
	{
		var port:Ball = Ball.allBalls[i];
		port.x +=  dx;
		if(dy!=0)
		port.y +=  dy-port.yspeed;
	}
}
Код AS3:
package{
	import flash.display.MovieClip;
	import flash.events.Event;
	public class Ball extends MovieClip{
		public static var allBalls:Array=[];
		var xspeed:Number=-10+Math.random()*20;
		public var yspeed:Number=-5;
		var grav:Number=1;
		var radius:Number;
		public function Ball(){
			scaleX=scaleY=Math.random()*0.5+0.5;
			radius=width/2
			allBalls.push(this);
			addEventListener(Event.ENTER_FRAME,onFrame);
			trace(allBalls.length)
		}
 
		public function onFrame(e:Event):void{
			yspeed+=grav;
			xspeed*=0.9;
 
			y+=yspeed;
			x+=xspeed;
 
			hitSelf()
			hitStage()
 
		}
 
		public function hitSelf():void{
			for(var i=0;i<allBalls.length;i++){
				var currentBall=allBalls[i];
				if(currentBall!=this){
					var dx=currentBall.x-x;
					var dy=currentBall.y-y;
					var dis=Math.sqrt(dx*dx+dy*dy);
 
					var needDist=radius+currentBall.radius;
					if(dis<needDist){
						var ang1=Math.atan2(currentBall.y-y,currentBall.x-x)
						var ang2=Math.atan2(y-currentBall.y,x-currentBall.x)
 
						x += Math.cos(ang1) * ((dis-needDist)/2)
						y += Math.sin(ang1) * ((dis-needDist)/2)
 
						xspeed += Math.cos(ang1) * ((dis-needDist)/2)
						yspeed += Math.sin(ang1) * ((dis-needDist)/2)
 
						currentBall.x += Math.cos(ang2) * ((dis-needDist)/2)
						currentBall.y += Math.sin(ang2) * ((dis-needDist)/2)
 
						currentBall.xspeed += Math.cos(ang2) * ((dis-needDist)/2)
						currentBall.yspeed += Math.sin(ang2) * ((dis-needDist)/2)
 
					}
				}
			}
		}
 
 
 
		public function hitStage():void{
			if(x>300-radius){
				x=300-radius
				xspeed=0;
			}
			if(x<radius){
				x=radius
				xspeed=0;
			}
			if(y>300-radius){
				y=300-radius;
				yspeed=-yspeed*0.2
			}
		}
	}
}

Старый 06.12.2010, 17:34
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 25  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Всё работает, большое спасибо! Я понял, что надо сделать доступ к переменной "public" и добавить
Код AS3:
this.addEventListener(Event.ENTER_FRAME,onFrame);
function onFrame(e:Event):void
{
 
	for (var i=0; i<Ball.allBalls.length; i++)
	{
		var port:Ball = Ball.allBalls[i];
		port.x +=  dx;
		if(dy!=0)
		port.y +=  dy-port.yspeed;
	}
}
Который будет выполнять постоянное поднятие шаров!

Спасибо!

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

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

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


 


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


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