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

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

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

Регистрация: Feb 2014
Сообщений: 30
Cool Увеличение скорости падения

Здравствуйте! Написал падение предмета. Вот так:
Код AS3:
import flash.events.Event;
import flash.display.MovieClip;
 
var kadr = 0;
 
stage.addEventListener(Event.ENTER_FRAME, poyavlenie);
function poyavlenie (e:Event)
{
	if (++kadr%90 == 0)
	{
	var yayc = new Yayc();
	var razb = new Razb();
	var coord:Array = [95, 255, 415, 565, 707];
    var toch:uint;
    toch = uint(Math.random() * coord.length);
	yayc.x = razb.x = coord[toch];
	yayc.y = razb.y = 195;
	yayc.xmov = razb.xmov = 0;
	yayc.ymov = razb.ymov = 5;
	razb.visible = false;
 
	addChild(yayc);
	addChild(razb);
	yayc.addEventListener(Event.ENTER_FRAME, polet);
	razb.addEventListener(Event.ENTER_FRAME, polet2);
	}
}
 
function polet (e:Event)
{
	var yayc = e.currentTarget;
	yayc.x += yayc.xmov;
	yayc.y += yayc.ymov;
	if (yayc.y>845)
	{yayc.removeEventListener(Event.ENTER_FRAME, polet);
	removeChild (yayc);
	}
 
}
 
function polet2(e:Event)
 {
  var razb = e.currentTarget;
  razb.x += razb.xmov;
  razb.y += razb.ymov;
  if (razb.y > 845)
  {
   setTimeout(function():void
   {
    removeChild(razb);
   }, 70 * stage.frameRate);
   razb.removeEventListener(Event.ENTER_FRAME, polet2)
   razb.visible = true;
  }  
 }
А как теперь с помощью Timer'а сделать чтобы увеличивалась скорость падения через определённые промежутки времени(например через минуту, потом ещё через минуту и т.д) или количество предметов увеличивалось подскажите пожалуйста!

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Если я правильно понял логику кода, то за скорость у вас отвечают свойстваxmov и ymov, падающих объектов. Создайте глобальное свойство скорости для икс и игрек на сцене, и меняйте его с помощью таймера с нужным вам интервалом. А скорость каждому предмету устанавливайте исходя из текущего свойства скорости сцены. Примерно так:
Код AS3:
//переменная скорости на сцене
var speedX:Number=0;
var speedY:Number=5;
 
//в методе создания объектов poyavlenie
yayc.xmov = razb.xmov = speedX;
yayc.ymov = razb.ymov = speedY;
Код AS3:
//создаёте таймер отдельно с интервалом - минута, где увеличиваете глобальную скорость
var timer:Timer=new Timer(60000);
timer.addEventListener(TimerEvent_TIMER, timer_timer);
timer.start();
function timer_timer(e:TimerEvent):void
{
    speedX+=5;
    speedY+=2;
}
А вообще у вас не совсем верный подход. Лучше все объекты помещать в массив и пробегаться по этому массиву перемещая объекты в нём, чем на каждый объект вешать enterFrame. Но это дело опыта, всё придёт со временем.

Старый 12.03.2014, 08:47
tihomir вне форума Посмотреть профиль Отправить личное сообщение для tihomir Найти все сообщения от tihomir
  № 3  
Ответить с цитированием
tihomir

Регистрация: Feb 2014
Сообщений: 30
Спасибо! Заработало Только точку забыли
Код AS3:
timer.addEventListener(TimerEvent.TIMER, timer_timer);
Добавлено через 26 часов 58 минут
Попробовал вот увеличить кол-во кадров (чтобы выпадало больше предметов).Вот так:

Код AS3:
var kadr=0;
var _count=1;
var speedX:Number=0;
var speedY:Number=5;
stage.addEventListener(Event.ENTER_FRAME, poyavlenie);
 
function poyavlenie (e:Event)
{
	if (++kadr%90 == 0)
{
   for (var i:int = 0; i < _count; i++)
   {
	var yayc = new Yayc();
	var razb = new Razb();
	var coord:Array = [95, 255, 415, 565, 707];
    var toch:uint;
    toch = uint(Math.random() * coord.length);
	yayc.x = razb.x = coord[toch];
	yayc.y = razb.y = 195;
	yayc.xmov = razb.xmov = speedX;
	yayc.ymov = razb.ymov = speedY;
	razb.visible = false;
	addChild(yayc);
	addChild(razb);
	yayc.addEventListener(Event.ENTER_FRAME, polet);
	razb.addEventListener(Event.ENTER_FRAME, polet2);
	}
}
 
var timer:Timer=new Timer(20000);
	timer.addEventListener(TimerEvent.TIMER, timer_timer);
	timer.start();
 
	function timer_timer(e:TimerEvent):void 
	{
	_count++;
	}
И теперь через 20 секунд они начинают выпадать одновременно(падают в одну линию) а по идее должны рандомно.

Добавлено через 54 часа 59 минут
Спасибо. Всё получилось)

Вот:
Код AS3:
import flash.events.Event;
import flash.display.MovieClip;
import flash.events.TimerEvent;
var kadr=0;
var _count=80;
var speedX:Number=0;
var speedY:Number=5;
stage.addEventListener(Event.ENTER_FRAME, poyavlenie);
 
function poyavlenie (e:Event)
{
	if (++kadr%_count == 0)
	{var yayc = new Yayc();
	var razb = new Razb();
	var coord:Array = [95, 255, 415, 565, 707];
    var toch:uint;
    toch = uint(Math.random() * coord.length);
	yayc.x = razb.x = coord[toch];
	yayc.y = razb.y = 195;
	yayc.xmov = razb.xmov = speedX;
	yayc.ymov = razb.ymov = speedY;
	razb.visible = false;
	addChild(yayc);
	addChild(razb);
	yayc.addEventListener(Event.ENTER_FRAME, polet);
	razb.addEventListener(Event.ENTER_FRAME, polet2);
	}
}
 
var timer:Timer=new Timer(1200000);
	timer.addEventListener(TimerEvent.TIMER, timer_timer);
	timer.start();
 
	function timer_timer(e:TimerEvent):void 
	{
 
	_count -= 10;
 
	}
 
function polet (e:Event)
{
	var yayc = e.currentTarget;
	yayc.x += yayc.xmov;
	yayc.y += yayc.ymov;
	if (yayc.y>845)
	{yayc.removeEventListener(Event.ENTER_FRAME, polet);
	removeChild (yayc);
	}
 
}
 
function polet2(e:Event)
 {
  var razb = e.currentTarget;
  razb.x += razb.xmov;
  razb.y += razb.ymov;
  if (razb.y > 845)
  {
   setTimeout(function():void
   {
    removeChild(razb);
   }, 70 * stage.frameRate);
   razb.removeEventListener(Event.ENTER_FRAME, polet2)
   razb.visible = true;
  }  
 }

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

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

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


 


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


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