AS3 выдает ошибку Delay/TimerEvent?

Всем привет из прошлого. ;)

Хорошо, Flash мертв, однако я хотел повторить старую вещь только сегодня.

Моя интервальная задержка тикает каждую (одну) секунду.

Кажется, все в порядке, за исключением того, что у меня проблема с задержкой между временем, отображаемым в отладчике, и часами в моей гостиной.

Поскольку вызов таймера:

new Timer(1000);

Я не понимаю, как какой-то код может не выполняться с такой большой задержкой.

Вот минимальный тестируемый код.
Вы можете скопировать/вставить код, указанный в кадре 1, чтобы проверить проблему.
Этап — 1024 * 400 (также работает с 550 * 400).

Смысл этого в том, чтобы создать приложение для шахматных часов только для моего удовольствия (так почему бы не AS3 для этой цели?).

Любые советы, пожалуйста? С уважением и заранее спасибо!!!

import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormatAlign;
import flash.text.TextField;
import flash.display.Stage;
import flash.display.Sprite;
import flash.display.Graphics;

var container1:Sprite = new Sprite();
var container2:Sprite = new Sprite();
var margin1:uint = 20
var display1: TextField = new TextField();
var tFormat:TextFormat = new TextFormat();

////////////////  2 TEST !!! (970)   ////////
var timer:Timer = new Timer(1000);

var time:uint = 0;
var seconds:String;
var minutes:String;
var hours:String;
var date = new Date();


dateInit();
display1Init();

//timer.addEventListener(TimerEvent.TIMER_COMPLETE,changeDate);

timer.addEventListener(TimerEvent.TIMER,changeDate);
timer.start();

function dateInit()
{
    date.hours = date.minutes = date.seconds = date.milliseconds = 0;
    
    trace(date);
    createContainer(container1);
    createContainer(container2)
}

function createContainer(aSprite:Sprite) { addChild(aSprite); }

function display1Init()
{
    container1.addChild(display1);
    drawContainer1();
    drawContainer2();
    display1.width = 140;
    display1.height = 80;
    display1.background = true;
    display1.x = container1.width/2+ margin1/2 - display1.width/2 ;
    display1.y = 100;
    //display1.autoSize = TextFieldAutoSize.CENTER;
    //tFormat.align = TextFormatAlign.CENTER;
    tFormat.size = 26;
    tFormat.leftMargin = 35;
    tFormat.rightMargin = 35;
    tFormat.bold = true
    display1.border = true;
    display1.text=("\n" + date.hours + "." + "00" + "." + "00" + "\n\n");
    display1.setTextFormat(tFormat);
}

function drawContainer1():void
{
    var g:Graphics = container1.graphics
    g.lineStyle(1,0x000000);
    g.beginFill(0x996666)
    g.drawRoundRect(margin1,margin1,(stage.stageWidth/2)-margin1*2,(stage.stageHeight)-margin1*2,30,30);
    g.endFill();
}

function drawContainer2():void
{
    var g:Graphics = container2.graphics
    g.lineStyle(1,0x000000);
    g.beginFill(0x996666)
    g.drawRoundRect(container1.width+margin1,margin1,container1.width,(stage.stageHeight)-margin1*2,30,30);
    g.endFill();
}

////////////////////// UPDATE ////////////

function formatDate():void
{
    if (date.seconds<10){ seconds = "0"+date.seconds }
    else{ seconds = date.seconds}
    
    if (date.minutes<10){ minutes = "0"+date.minutes }
    else{ minutes = date.minutes }
}

function changeDate(e:TimerEvent):void
{
    date.seconds = timer.currentCount;
    formatDate();
    display1.text=("\n" + date.hours + "." + minutes + "." + seconds + "\n\n");
    display1.setTextFormat(tFormat);
    
    e.updateAfterEvent();
    
    if (timer.currentCount>59)
    {
        date.seconds = 0;
        //timer.stop();
        timer.reset();
        timer.start();
    }
    
    e.updateAfterEvent();
}

Объясните пожалуйста, в чем проблема. Это неясно.

Organis 12.09.2022 23:03

@Organis Я думаю, он имеет в виду, что существует задержка / смещение между часами реального мира, говорящее о том, что прошла 1 секунда по сравнению с функцией AS3 (занимает больше времени) для обновления текстового поля. Он должен обновляться каждую секунду, но я думаю, что код занимает больше времени. Я не могу протестировать AS3 (на этом компьютере нет IDE).

VC.One 13.09.2022 01:18

@tatactic С возвращением. Приятно видеть, что вы все еще используете AS3. Я вернусь к этому сам, когда эти мультимедийные API появятся... В любом случае, пожалуйста, уточните проблему. Это задержка в обновлении времени в текстовом поле (т.е. это занимает больше 1 секунды реального времени)?

VC.One 13.09.2022 01:33

@Organis и VC.One: Правда, у меня есть задержка между реальным временем и временем флэш-памяти через +- 3 минуты. Задача кода должна отображать только время, применять мой TextFormat каждую секунду и все. Итак, я не понимаю эту проблему... Я хотел бы исправить это, прежде чем добавлять вторые часы. Одни часы для белых / одни для черных, как в настоящих шахматах.

tatactic 13.09.2022 01:48

@Organis, спасибо... Да, я вернулся к AS3, скучаю по флешу ;)

tatactic 13.09.2022 01:51

@tatactic Я бы не стал измерять время с помощью таймеров и тому подобного. Flash Player не является средой реального времени, все события обрабатываются в соответствующей фазе, которая является частью покадрового цикла и может отставать действительно безбожным образом. Гораздо лучше измерить разницу между двумя объектами Date, один из которых представляет время начала, а другой — текущее время.

Organis 13.09.2022 18:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что-то вроде того.

package
{
    public class PreciseTimer
    {
        private var start:Date;
        
        public function PreciseTimer()
        {
            reset();
        }
        
        // Resets the precise timer.
        public function reset():void
        {
            start = new Date;
        }
        
        // Returns the difference between instantiation/reset
        // and the present moment — in milliseconds.
        public function getTimer():int
        {
            return (new Date).valueOf() - start.valueOf();
        }
    }
}

Затем использование:

import PreciseTimer;

var PT = new PreciseTimer;

// ...

// At any given moment:
trace(PT.getTimer(), "milliseconds passed.");

Теперь вы можете конвертировать и отображать полученное значение любым удобным для вас способом.

Большое спасибо, +1 в любом случае, прежде чем я попробую. С наилучшими пожеланиями!!! Это звучит приятно для моего мозга :) Это звучит лучше, чем поставить fps на 60, чтобы получить более острый результат, чтобы сделать «Timer MovieClip».

tatactic 14.09.2022 11:22

Отлично сделано! Я должен иметь дело с этим сейчас в приложении... Большое СПАСИБО!!! Хорошего дня!!! Решается на первый взгляд АМО.

tatactic 14.09.2022 13:33

Вы убили Делэя @Organis Аааааааааааааааааааааааааааааааааааааааааааааааа :)

tatactic 14.09.2022 19:43

Другие вопросы по теме