22/10/18 12:24
Thejuster
Salve ragazzi, durante la creazione del mio client
ho la necessità di utilizzare dei TextBox su canvas.
Ho trovato dunque questo dalla rete.
goldfirestudios.com/blog/108/…
Il problema sta, che quando vado a fare il classico loop, il controllo si refresha in continuazione.
E per essere disegnato ha bisogno di un solo Clear. Cosa non ho capito perché accade.
Ho creato un sistema basato su processi di Rendering
esempio
Ed ho come dire fatto una sorta di Metodi identici per ogni tipo di classe
che richiama il draw.
tutto lo gestisce il SceneManager.
quindi faccio
dal momento che creo il loop
La Scene Title che sarebbe una schermata dove l'utente effettua il login è composta così
In pratica il funzionamento è questo.
All'avvio
$scene.ChangeScene("SceneTitle"
Il SceneManager che sarebbe $scene cambia in SceneTitle.
Di conseguenza il Render loop sarà passato alla classe SceneTitle al proprio metodo Draw.
E fin qui non ci sono problemi.
Ma il problema è che quando va il Draw, l plugin usato per disegnare L'inputBox
continua a refreshare in particolar modo,
E come se mostrasse al primo render, il testo correttamente, al successivo render tutto vuoto.
per poi ripetere all'infinito
testo visibile, testo vuoto, testo visibile, testo vuoto.
Non riesco a capire il motivo di questo problema.
Fatto sta, e che quando tolgo dal file principale
alla funzione loop commento
//window.setTimeout(Loop, 1000 / fps);
non effettua più il refresh e stranamente funziona regolare.
come mai?
ho la necessità di utilizzare dei TextBox su canvas.
Ho trovato dunque questo dalla rete.
goldfirestudios.com/blog/108/…
Il problema sta, che quando vado a fare il classico loop, il controllo si refresha in continuazione.
E per essere disegnato ha bisogno di un solo Clear. Cosa non ho capito perché accade.
Ho creato un sistema basato su processi di Rendering
esempio
//Classi var $system = new System(); //System var $actor = new Actor(); //Actor Class var $vec2 = new Vector2(); //Vector Class var $win = new Scene_Window(); var $keyboard = new Keyboard(); var $mouse = new Mouse(); var $camera = new Camera(); var $gui = new GUI(); var $music = new Audio(); var $scene = new SceneManager();
Ed ho come dire fatto una sorta di Metodi identici per ogni tipo di classe
che richiama il draw.
tutto lo gestisce il SceneManager.
quindi faccio
$scene.Initialize(ctx,viewport); //Ctx = Canvas , Viewport = Area virtuale $scene.ChangeScene("SceneTitle");
dal momento che creo il loop
//Funzione loop var fps = 30; function Loop() { ctx.clearRect(0,0,800,600); $scene.Render(ctx,viewport); window.setTimeout(Loop, 1000 / fps); }
La Scene Title che sarebbe una schermata dove l'utente effettua il login è composta così
//------------------------------- // Mire Engine - Scene Title //------------------------------ // (C) Copyright Making Italia //------------------------------ function SceneTitle() { this.background = new Image(); } SceneTitle.prototype.Initialize = function() { this.background.src = "data\System\TitleScreen.png"; sfx.src = "data\SE\cursor.mp3"; } //Update Cycle SceneTitle.prototype.Update = function() { } //Draw Cycle SceneTitle.prototype.Draw = function(ctx,viewport) { if($system.GetOperatingSystem() == "Desktop") { $gui.HideAll(); } ctx.drawImage(this.background,0,0); //------------ Problemi QUI var username = new CanvasText( canvas, { x: 20, y: 20, width: 300, placeholder: 'Enter your username...' } ); var password = new CanvasPassword( canvas, { x: 20, y: 55, width: 300, placeholder: 'Enter your password...' } ); var btt = new CanvasSubmit( canvas, { x: 20, y: 95, width: 300, placeholder: 'Submit', onSubmit: ( function() { return connection.send(Packet.Login + username.value + ":" + password.value); } ) } ); } SceneTitle.prototype.InputDown = function(e) { } SceneTitle.prototype.InputUp = function(e) { }
In pratica il funzionamento è questo.
All'avvio
$scene.ChangeScene("SceneTitle"
Il SceneManager che sarebbe $scene cambia in SceneTitle.
Di conseguenza il Render loop sarà passato alla classe SceneTitle al proprio metodo Draw.
E fin qui non ci sono problemi.
Ma il problema è che quando va il Draw, l plugin usato per disegnare L'inputBox
continua a refreshare in particolar modo,
E come se mostrasse al primo render, il testo correttamente, al successivo render tutto vuoto.
per poi ripetere all'infinito
testo visibile, testo vuoto, testo visibile, testo vuoto.
Non riesco a capire il motivo di questo problema.
Fatto sta, e che quando tolgo dal file principale
alla funzione loop commento
//window.setTimeout(Loop, 1000 / fps);
non effettua più il refresh e stranamente funziona regolare.
come mai?
mire.forumfree.it/ - Mire Engine
C# UI Designer
C# UI Designer