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

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

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

Регистрация: Feb 2010
Сообщений: 153
Отправить сообщение для temofony с помощью ICQ Отправить сообщение для temofony с помощью Skype™
По умолчанию мистика с таймером

Доброго времени муток)Я столкнулся со странной проблемой.У меня на кадру есть 2 динам.поля:поле очков и поле таймера.Как вы можете предположить,время отматывается назад и очки тоже.При достижении определенного условия флешка переходит на кадр с game over.На кадре с гейм овером есть кнопка повторить,которая преводит головку плеера на кадр с уровнем.Проблема:на уровне время начинает мотаться быстрее в 2 раза и очки соответствеено тоже.И так происходит при каждом вылете на гейм овер и поворном начале уровня.Привожу исходник кадра с уровнем:
Код AS1/AS2:
stop();
 
cur_lvl=4;
Mouse.hide();
_global.score=1000;
function scoreminus() {
	score-=50;
}
setInterval(scoreminus,500);
 
function moveClip(){
	_global.speedMove;
	var numLength:Number;
	var numMaxLength:Number=Math.sqrt(Math.pow(Stage.width,2)+Math.pow(Stage.height,2));
	var rotation:Number=Math.atan2(_ymouse-clip._y,_xmouse-clip._x)+Math.PI/2;
	clip._rotation=(rotation/Math.PI)*180;
	numLength=Math.sqrt(Math.pow(clip._x-_xmouse,2)+Math.pow(clip._y-_ymouse,2));
	speedMove=17*(numLength/numMaxLength);
	clip._x+=Math.sin(rotation)*speedMove;
	clip._y-=Math.cos(rotation)*speedMove;
	updateAfterEvent();
}
timer=setInterval(moveClip,1);
_global.Seconds = 10; //ЗАДАЕМ СЕКУНДЫ;
_global.Minutes = 00; //ЗАДАЕМ МИНУТЫ;
_global.Hours = 00; //ЗАДАЕМ ЧАСЫ;
function TIMER() { //СОЗДАЕМ ФУНКЦИЮ ТАЙМЕРА;
if ((Seconds > 0) || (Minutes > 0) || (Hours > 0)) { //ЕСЛИ СЕКУНДЫ, ИЛИ МИНУТЫ, ИЛИ ЧАСЫ, БОЛЬШЕ НУЛЯ, ТО...
Seconds--; //СЕКУНДЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
if (Seconds < 0) { //ЕСЛИ СЕКУНДЫ МЕНЬШЕ НУЛЯ, ТО...
Minutes--; //МИНУТЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
Seconds = 59; //СЕКУНДАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
if (Minutes < 0) { //ЕСЛИ МИНУТЫ МЕНЬШЕ НУЛЯ, ТО...
Hours--; //ЧАСЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
Minutes = 59; //МИНУТАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
Seconds = 59; //СЕКУНДАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
}
}
if (Seconds <= 9) { //ЕСЛИ СЕКУНДЫ МЕНЬШЕ 9, ТО...
var SS:String = "0" + Seconds; //СТАВИМ ПЕРЕД СЕКУНДАМИ 0;
} else { //ИНАЧЕ...
var SS:String = "" + Seconds; //НЕ СТАВИМ 0;
}
if (Minutes <= 9) { //ЕСЛИ МИНУТЫ МЕНЬШЕ 9, ТО...
var MM:String = "0" + Minutes; //СТАВИМ ПЕРЕД МИНУТАМИ 0;
} else { //ИНАЧЕ...
var MM:String = "" + Minutes; //НЕ СТАВИМ 0;
}
if (Hours <= 9) { //ЕСЛИ ЧАСЫ МЕНЬШЕ 9, ТО...
var HH:String = "0" + Hours; //СТАВИМ ПЕРЕД ЧАСАМИ 0;
} else { //ИНАЧЕ...
var HH:String = "" + Hours; //НЕ СТАВИМ 0;
}
TIMER_TEXT.text = HH + ":" + MM + ":" + SS; //ВЫВОДИМ ЧАСЫ, МИНУТЫ И СЕКУНДЫ В ТЕКСТОВОЕ ПОЛЕ;
} else { //ИНАЧЕ...
_root.gotoAndStop(5); //СКРЫВАЕМ ТАЙМЕР;
 
 
 
}
}
var IntervalID=setInterval(TIMER, 1000); //ФУНКЦИЯ ТАЙМЕРА БУДЕТ ОБНОВЛЯТЬСЯ С ИНТЕРВАЛОМ В 1000 МИЛИСЕКУНД.

Я пытался преназначить значения времени и счета на кнопке "сыграть снвова" таким вот образом:

Код AS1/AS2:
on(press) {
	score=1000;
Seconds = 10;
Minutes = 00;
Hours = 00;
	score=1000;
Seconds = 10;
Minutes = 00;
Hours = 00;
	score=1000;
Seconds = 10;
Minutes = 00;
Hours = 00;
	_root.gotoAndStop(cur_lvl);
}

Не пойму блин в чем дело...

Старый 22.09.2010, 18:14
lexa2000lexa вне форума Посмотреть профиль Отправить личное сообщение для lexa2000lexa Найти все сообщения от lexa2000lexa
  № 2  
Ответить с цитированием
lexa2000lexa

Регистрация: Sep 2005
Сообщений: 950
нужно очишать интервал.

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

Регистрация: Feb 2010
Сообщений: 153
Отправить сообщение для temofony с помощью ICQ Отправить сообщение для temofony с помощью Skype™
я пробовал очищать интервалы...ничего не меняется..время после повторной попытки сыграть опять начинает убыстряться

Старый 22.09.2010, 19:05
lexa2000lexa вне форума Посмотреть профиль Отправить личное сообщение для lexa2000lexa Найти все сообщения от lexa2000lexa
  № 4  
Ответить с цитированием
lexa2000lexa

Регистрация: Sep 2005
Сообщений: 950
в вашем коне нет ни одного clearInterval, чем же вы тогда их очищаете?

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

Регистрация: Feb 2010
Сообщений: 153
Отправить сообщение для temofony с помощью ICQ Отправить сообщение для temofony с помощью Skype™
я демонстрирую код уже без них.я добавлял clearInterval в елсе на таймере и не срабатывало(

Добавлено через 4 минуты
вот код с очищением интервалов:

Код AS1/AS2:
stop();
 
cur_lvl=4;
Mouse.hide();
_global.score=1000;
function scoreminus() {
	score-=50;
}
var IntervalID1=setInterval(scoreminus,500);
 
function moveClip(){
	_global.speedMove;
	var numLength:Number;
	var numMaxLength:Number=Math.sqrt(Math.pow(Stage.width,2)+Math.pow(Stage.height,2));
	var rotation:Number=Math.atan2(_ymouse-clip._y,_xmouse-clip._x)+Math.PI/2;
	clip._rotation=(rotation/Math.PI)*180;
	numLength=Math.sqrt(Math.pow(clip._x-_xmouse,2)+Math.pow(clip._y-_ymouse,2));
	speedMove=17*(numLength/numMaxLength);
	clip._x+=Math.sin(rotation)*speedMove;
	clip._y-=Math.cos(rotation)*speedMove;
	updateAfterEvent();
}
timer=setInterval(moveClip,1);
_global.Seconds = 10; //ЗАДАЕМ СЕКУНДЫ;
_global.Minutes = 00; //ЗАДАЕМ МИНУТЫ;
_global.Hours = 00; //ЗАДАЕМ ЧАСЫ;
function TIMER() { //СОЗДАЕМ ФУНКЦИЮ ТАЙМЕРА;
if ((Seconds > 0) || (Minutes > 0) || (Hours > 0)) { //ЕСЛИ СЕКУНДЫ, ИЛИ МИНУТЫ, ИЛИ ЧАСЫ, БОЛЬШЕ НУЛЯ, ТО...
Seconds--; //СЕКУНДЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
if (Seconds < 0) { //ЕСЛИ СЕКУНДЫ МЕНЬШЕ НУЛЯ, ТО...
Minutes--; //МИНУТЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
Seconds = 59; //СЕКУНДАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
if (Minutes < 0) { //ЕСЛИ МИНУТЫ МЕНЬШЕ НУЛЯ, ТО...
Hours--; //ЧАСЫ УМЕНЬШАЕМ НА ЕДИНИЦУ;
Minutes = 59; //МИНУТАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
Seconds = 59; //СЕКУНДАМ ПРИСВАЕВАЕМ ЗНАЧЕНИЕ 59;
}
}
if (Seconds <= 9) { //ЕСЛИ СЕКУНДЫ МЕНЬШЕ 9, ТО...
var SS:String = "0" + Seconds; //СТАВИМ ПЕРЕД СЕКУНДАМИ 0;
} else { //ИНАЧЕ...
var SS:String = "" + Seconds; //НЕ СТАВИМ 0;
}
if (Minutes <= 9) { //ЕСЛИ МИНУТЫ МЕНЬШЕ 9, ТО...
var MM:String = "0" + Minutes; //СТАВИМ ПЕРЕД МИНУТАМИ 0;
} else { //ИНАЧЕ...
var MM:String = "" + Minutes; //НЕ СТАВИМ 0;
}
if (Hours <= 9) { //ЕСЛИ ЧАСЫ МЕНЬШЕ 9, ТО...
var HH:String = "0" + Hours; //СТАВИМ ПЕРЕД ЧАСАМИ 0;
} else { //ИНАЧЕ...
var HH:String = "" + Hours; //НЕ СТАВИМ 0;
}
TIMER_TEXT.text = HH + ":" + MM + ":" + SS; //ВЫВОДИМ ЧАСЫ, МИНУТЫ И СЕКУНДЫ В ТЕКСТОВОЕ ПОЛЕ;
} else { //ИНАЧЕ...
clearInterval(IntervalID1);
clearInterval(IntervalID2);
_root.gotoAndStop(5);//кадр с гейм овером
}
}
var IntervalID2=setInterval(TIMER, 1000); //ФУНКЦИЯ ТАЙМЕРА БУДЕТ ОБНОВЛЯТЬСЯ С ИНТЕРВАЛОМ В 1000 МИЛИСЕКУНД.
Этот код не помогает(

Добавлено через 2 часа 48 минут
Понял как сделать.Тема закрыта.(нужно было делать очищение интервалов до их инициализации)

Добавлено через 3 часа 11 минут
Понял как сделать.Тема закрыта.(нужно было делать очищение интервалов до их инициализации)
__________________
Незнание правил освобождает от ответственности.


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

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

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


 


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


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