Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-12-2005, 13:40   #21
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
commento temporaneamente gli altri due test che riguardano update...

Inserisco questo codice in update di Gem:
Codice:
    public void update(AbstractTimer timer)
    {
        if(timer.getTime() >= 3500)
            ++currentFrame;        
    }
il test di fek passa...

Ora però devo fare in modo di far passare gli altri test:
Codice:
    public void testUpdate()
    {
        gem.addFrame(10, 10, 100);        
        
        gem.update(new MockTimer(3500));
        
        assertEquals("current frame must be 1 after an update", 1, gem.getCurrentFrame());                
    }
questo passa senza modifche al codice...

Ora passiamo al secondo:
Codice:
   public void testUpdateWithThreeFrames()
    {
        gem.addFrame(10, 10, 100);
        gem.addFrame(20, 20, 100);
        
        MockTimer timer = new MockTimer(3500);

        gem.update(timer);
        
        timer.advance(1);
        gem.update(timer);
        
        assertEquals("current frame must be 1", 1, gem.getCurrentFrame());                

        timer.advance(99);
        gem.update(timer);

        assertEquals("current frame must be 2", 2, gem.getCurrentFrame());                
    
    }
Il test modifcato in questo modo non passa...

Devo lavorare sul mio codice che quindi non va bene...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 13:51   #22
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Allora modifico addFrame(0, 0 ,0) nel costruttore in addFrame(0, 0, 3500)...

Aggiungo a gem:

private long frameChangeTimeStamp = 0;

Modifico il codice di update in questo modo:
Codice:
    public void update(AbstractTimer timer)
    {
        long timeStamp = timer.getTime(); 
        if(timeStamp - frameChangeTimeStamp >= frames.get(getCurrentFrame()).getLength())
        {
            ++currentFrame;
            frameChangeTimeStamp = timeStamp;
        }
    }
il test passa...

Se è tutto ok vado a scrivere il prossimo test...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 14:05   #23
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il nuovo test è questo:
Codice:
    public void testOneUpdateForMultipleFrames()
    {
        gem.addFrame(10, 10, 100);
        gem.addFrame(20, 20, 100);
        
        MockTimer timer = new MockTimer(3600);

        gem.update(timer);

        assertEquals("current frame must be 2 after one update", 2, gem.getCurrentFrame());                
    }
Se passa un tempo maggiore di quello necessario al cambio di un solo frame update dovrebbe portare l'animazione comunque al frame corretto...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 14:31   #24
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ed ecco il codice che fa passare il test:

Codice:
    public void update(AbstractTimer timer)
    {
        long deltaTime = 0;
        
        deltaTime = timer.getTime() - lastTime;
        currentTime += deltaTime;

        int frame = 0;        
        int frameTime = frames.get(frame).getLength();
        
        while (currentTime >= frameTime)
        {
            frameTime += frames.get(++frame).getLength();
        }
        
        lastTime = timer.getTime();
        
        currentFrame = frame;
    }
Non e' il codice migliore del mondo, ma fa il suo dovere. Un momento, ma perche' non ho scritto questo codice passo per passo, riga per riga? Perche' sono stato pigro, avevo gia' scritto esattamente questo algoritmino in passato e mi sentivo sicuro del successo. Infatti... non vi sto a riportare i penosi tentativi casuali per far passare tutti i test e le decine di minuti persi. Tutto perche' avevo dimenticato il += all'interno del loop. Eppure ero sicuro che fosse giusto.

Ho imparato la lezione, la prossima volta mi ricordero' di farlo passo passo anche se sono sicurissimo di quello che sto facendo, impieghero' certamente meno tempo di quanto ne ho impiegato questa volta, cercando di fare tutto in un passo.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 14:36   #25
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Test: se la gemma si trova al frame N-1 deve ritornare al frame 0 dopo 100 ms

Codice:
    public void testCyclingAnimation()
    {
        gem.addFrame(10, 10, 1000);
        
        MockTimer timer = new MockTimer(0);
        
        gem.update(timer);
        timer.advance(3500 + 1000);
        gem.update(timer);
        
        assertEquals("current frame must be 0 after a complete cycle", 0, gem.getCurrentFrame());        
    }
Ci sono due frame nell'animazione, dopo 4500 millisecondi il frame corrente dev'essere di nuovo quello iniziale. Fallisce con un out of bound exception, come era lecito attendersi.

A te. Non fare il mio stesso errore, fallo passo per passo
fek è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 14:43   #26
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non c'è stato bisogno di andare passo-passo perchè ci voleva un solo passo:
Codice:
    public void update(AbstractTimer timer)
    {
        long deltaTime = 0;
        
        deltaTime = timer.getTime() - lastTime;
        currentTime += deltaTime;

        int frame = 0;        
        int frameTime = frames.get(frame).getLength();
        
        while (currentTime >= frameTime)
        {
            if(frame == frames.size() - 1)
                frame = -1;
            
            frameTime += frames.get(++frame).getLength();
        }
        
        lastTime = timer.getTime();
        
        currentFrame = frame;
    }
Certo, il codice può essere rimesso in ordine, ma per ora è sufficiente
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 14:44   #27
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Passo a scrviere il test per la draw...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 14:59   #28
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Codice:
    
    public void testDrawTwoFrames()
    {
        gem.addFrame(10, 15, 100);
        gem.addFrame(20, 25, 100);
        
        MockEngine engine = MockEngine.createForTesting(800, 600);
        MockTimer timer = new MockTimer(3500);
        
        gem.update(timer);
        gem.draw(engine);
                
        assertEquals("bad texture drawn", 10.0f, engine.getTextureRect().left(), 0.001);
        assertEquals("bad texture drawn", 15.0f, engine.getTextureRect().top(), 0.001);
        
        timer.advance(100);
        gem.update(timer);
        gem.draw(engine);
        
        assertEquals("bad texture drawn", 20.0f, engine.getTextureRect().left(), 0.001);
        assertEquals("bad texture drawn", 25.0f, engine.getTextureRect().top(), 0.001);
    }

Ultima modifica di cionci : 11-12-2005 alle 15:03.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 15:04   #29
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Porto avanti io il test...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 15:16   #30
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ora bisogna modificare la classe Frame per memorizzare e poter recuperare i valori delle coordinate...
Per fare questo scrivo questo test:
Codice:
    public void testGetCoordinates()
    {
        Frame frame1 = new Frame(10, 20, 1000);
        assertEquals("erroneous value from getX", 10, frame1.getX());
        assertEquals("erroneous value from getY", 20, frame1.getY());
        
        Frame frame2 = new Frame(15, 5, 2000);
        assertEquals("erroneous value from getX", 15, frame2.getX());
        assertEquals("erroneous value from getX", 5, frame2.getY());
    }
Il codice che soddisfa questo test è questo:
Codice:
public class Frame
{
    private int length;
    private int x;
    private int y;
    
    public Frame(int x, int y, int length)
    {
        this.x = x;
        this.y = y;
        this.length = length;
    }

    public int getLength()
    {
        return length;
    }
    
    public int getX()
    {
        return x;
    }
    
    public int getY()
    {
        return y;
    }
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 15:22   #31
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Per fare questo mi basta aggiungere una sola riga in update:
Codice:
    public void update(AbstractTimer timer)
    {
        long deltaTime = 0;
        
        deltaTime = timer.getTime() - lastTime;
        currentTime += deltaTime;

        int frame = 0;        
        int frameTime = frames.get(frame).getLength();
        
        while (currentTime >= frameTime)
        {
            if(frame == frames.size() - 1)
                frame = -1;
            
            frameTime += frames.get(++frame).getLength();
        }
        
        lastTime = timer.getTime();
        
        currentFrame = frame;
        
        setTextureArea(frames.get(frame).getX(), frames.get(frame).getY());
    }
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 15:37   #32
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il task non è ancora finito, dobbiamo ancora gestire le animazioni della gemma illuminata...ma non so se vi siete resi conto, ma abbiamo implicitamente risolto anche il task 6.2.4 !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 15:45   #33
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
si perchè usi un timer unico... mi accontenterò di fare un po' di refactoring
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 15:59   #34
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
C'è ancora da includere l'update delle gemme in Grid ed inizializzare le nuove gemme con i giusti frame in GemFactory...

Credo che tu possa partere anche ora... Intanto preparo il test per le gemme illuminate per fek !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 16:05   #35
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da cionci
inizializzare le nuove gemme con i giusti frame in GemFactory
Anzi, mi sa che questa cosa la dovremmo fare noi...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 16:07   #36
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il nuovo test per fek:
Codice:
    public void testBrightenedFrames()
    {
        gem.addFrame(10, 15, 100);
        gem.addFrame(20, 25, 100);
        
        gem.useBrighterImage();
        
        MockEngine engine = MockEngine.createForTesting(800, 600);
        MockTimer timer = new MockTimer(3500);
        
        gem.update(timer);
        gem.draw(engine);
                
        assertEquals("bad texture drawn", 42, engine.getTextureRect().left());
        assertEquals("bad texture drawn", 47, engine.getTextureRect().top());
        
        gem.useNormalImage();
        
        timer.advance(100);
        gem.update(timer);
        gem.draw(engine);
        
        assertEquals("bad texture drawn", 20, engine.getTextureRect().left());
        assertEquals("bad texture drawn", 25, engine.getTextureRect().top());        
    }
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 17:12   #37
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Rieccomi.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 17:21   #38
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Una sola modifica in update():

Codice:
        setTextureArea(
            frames.get(frame).getX() + (this.bright ? 32 : 0), 
            frames.get(frame).getY());
Poi ho dovuto modificare il test perche' la gemma illuminata e' quella a destra di 32 pixel, non a destra e in basso:

Codice:
        assertEquals("bad texture drawn", 42, engine.getTextureRect().left());
        assertEquals("bad texture drawn", 15, engine.getTextureRect().top());
Ora non mi resta che aggiungere una chiamata in Grid per fare l'update delle gemme e aggiungere i frame di animazione coretti alla creazione delle gemme stesse.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 17:21   #39
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il test ce l'hai...telefono alla mia ragazze e dopo apro MSN...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2005, 17:22   #40
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ok...giusto... Avevo sbagliato il test...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Alcune partite NBA saranno trasmesse in ...
Intel Core 13000 e 14000 aumentano uffic...
Gemini sta per arrivare in Google Maps: ...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Il Motorola Edge 70 non ha più se...
Alcuni Galaxy S26 utilizzeranno il chip ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:48.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v