* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 24, 2024, 01:00:02 am

Inserisci il nome utente, la password e la durata della sessione.

53 Visitatori, 0 Utenti

Autore Topic: OOPpizzazione...  (Letto 16092 volte)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
OOPpizzazione...
« il: Maggio 09, 2012, 09:22:56 am »
sto "traducendo" in OOP il sorgente con cui facevamo le prove con zengl
così è molto più leggibile secondo me però...
il movimento, sia della nave che dei nemici, non mi sembra più fluido come prima: ora va un po' a scatti

magari ho toppato da qualche parte... se avete modo dategli un'occhiata che magari riuscite a vedere qualcosa che io non vedo :=)
Imagination is more important than knowledge (A.Einstein)

Microges2000

  • Global Moderator
  • Full Member
  • *****
  • Post: 130
  • Karma: +1/-0
    • Power of Nature
Re:OOPpizzazione...
« Risposta #1 il: Maggio 09, 2012, 02:37:24 pm »
Riscrivi solo le procedure che modifichi. Mi spiego....

in usprite hai ridefinito  OnDraw, OnProc e OnFree (che non fanno nulla se non richiamare quella del parent); stessa cosa in uspriteenemy ed in uspritenave. Tieni presente che FPC manda una cascata di call (TSpriteNave.OnProc chiama TSprite.InProc che chiama zglCSprite2D.OnProc e cosi' via per le altre) e questo consuma codice.

Altra cosa... se ti serve velocità non usare una cosa tipo
 if X > 750 then  X := 750;
 if X < 0 then  X := 0;
 if Y > 550 then  Y := 550;
 if Y < 0 then  Y := 0;

ma metti gli else

 if X > 750
 then 
 X := 750
else
 if X < 0 then  X := 0;
 
if Y > 550
then 
  Y := 550
else
 if Y < 0 then  Y := 0;

ultima cerca sempre di lavorare con numeri interi e, se possibile con multipli di 2 (i calcoli float occupano una marea di risorse e le multiplicazioni e divisioni con multipli di 2 sono trasformati in shift con una velocità molto maggiore del calcoli standard)

Truccaccio (usato multo pero') se devi usare i numeri in virgola mobile e ci devi fare molte operazioni usa la trasformazione in intero:

Per esempio ho le coordinate X, Y, Z in virgola mobile e devo eseguire le operazioni di rotazione sugli assi X, Y, Z...

Var
  X1, Y1, Z1 : Integer;
Begin
  X1 := Round(X*1000);
  Y1 := Round(Y*1000);
  Z1 := Round(Z*1000);

  RotazioneInX(X1, Y1, Z1);
  RotazioneInY(X1, Y1, Z1);
  RotazioneInZ(X1, Y1, Z1);

  X := X1 / 1000;
  Y := Y1 / 1000;
  Z := Z1 / 1000;
End;

in questo caso gli unicio calcoli con virgola mobile sono la trasformazione in intero (ho usato la precisione all 3a cifra decimale con quel 1000), tutti gli altri alcoli sono effettuati tra interi.

bye
Il possibile lo abbiamo già fatto, l'impossibile lo stiamo facendo, per i miracoli ci stiamo attrezzando

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:OOPpizzazione...
« Risposta #2 il: Maggio 10, 2012, 09:18:27 am »
in effetti non è che mi sono regolato più di tanto con le ereditarietà :)
spero presto di poter fare le ottimizzazioni anche se il problema me lo da anche con 1 solo sprite e quindi la magagna probabilmente sarà anche da qualche altra parte.

cmq appena sistemo posto i risultati
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:OOPpizzazione...
« Risposta #3 il: Maggio 10, 2012, 09:21:53 am »
Forse non ho capito il problema, ma sul mio Windows7Ent il codice corre senza andare a scatti. :(
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:OOPpizzazione...
« Risposta #4 il: Maggio 10, 2012, 11:49:09 am »
fai questa prova
1) porta l'astronave all'estrema sx dello schermo
2) schiaccia e tieni premuto il tasto freccia dx fino a raggiungere il lato opposto

dovresti vedere che, ad intervalli regolari, l'astronave fa una specie di scatto per poi riprendere fluidamente lo spostamento
sugli sprite "nemici" la cosa si nota molto meno

questo me lo fa su linux 64 bit

Edit:
stavo pensando se non fosse che, nella matrice di disegni (nel .png) non ci sia un qualche disallineamento...
magari ho toppato di qualche pixel... lavorando di notte può capitare :D
appena posso provo senza far girare i frame ma lasciandone uno sempre fisso
« Ultima modifica: Maggio 10, 2012, 11:51:32 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:OOPpizzazione...
« Risposta #5 il: Maggio 10, 2012, 12:41:55 pm »
Non è l'immagine ;)
Ho allineato tutte le astronavi in alto a sinistra dei vari frame (con GIMP e la sua griglia).
Lo scatto che dici effettivamente si percepisce.
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:OOPpizzazione...
« Risposta #6 il: Maggio 10, 2012, 04:58:46 pm »
Ciao,
 il mio approccio a ZenGL è ancora più radicale ;)
Lo stavo riscrivendo ad oggetti ;)
Ho qualche problemino con l'impostazione del contesto OpenGL con le finestre di Freepascal ;)

EDIT:
Secondo me potrebbe essere impostato in questo modo un progetto multipiattaforma. Il minor numero di ifdef possibile ;) , sicuramente è migliorabile, ma è sempre un inizio :D
« Ultima modifica: Maggio 10, 2012, 06:53:14 pm da Stilgar »
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:OOPpizzazione...
« Risposta #7 il: Maggio 10, 2012, 07:31:24 pm »
Non è l'immagine ;)
Ho allineato tutte le astronavi in alto a sinistra dei vari frame (con GIMP e la sua griglia).
Lo scatto che dici effettivamente si percepisce.

infatti non è l'immagine ho controllato anche io
ti dirò di più...
se recuperi il sorgente originale della demo e commenti la rotazione della camera e lo spostamento del frame come sotto

Codice: [Seleziona]
procedure Timer;
  var
    i : Integer;
begin
  INC( time, 2 );

  //camMain.Angle := camMain.Angle + cos( time / 1000 ) / 10;

  (*
  for i := 0 to 20 do
    begin
      INC( tux[ i ].Frame );
      if tux[ i ].Frame > 20 Then
        tux[ i ].Frame := 2;
    end;
  *)
  for i := 0 to 9 do
    begin
      tux[ i ].Pos.X := tux[ i ].Pos.X + 1.5;
      if tux[ i ].Pos.X > 864 Then
        tux[ i ].Pos.X := -96;
    end;
  for i := 10 to 19 do
    begin
      tux[ i ].Pos.X := tux[ i ].Pos.X - 1.5;
      if tux[ i ].Pos.X < -96 Then
        tux[ i ].Pos.X := 864;
    end;

  if key_Press( K_ESCAPE ) Then zgl_Exit();
  key_ClearState();
end;

vedrai che anche i tux fanno il loro piccolo scatto...
Imagination is more important than knowledge (A.Einstein)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:OOPpizzazione...
« Risposta #8 il: Maggio 10, 2012, 07:36:56 pm »
Ciao,
 il mio approccio a ZenGL è ancora più radicale ;)
Lo stavo riscrivendo ad oggetti ;)
Ho qualche problemino con l'impostazione del contesto OpenGL con le finestre di Freepascal ;)

ho visto anche se sotto linux non posso compilare
(ho capito... mi devo installare lazarus anche sotto win :P)
però così credo che la prendiamo un po' alla larga che dici? ;)
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:OOPpizzazione...
« Risposta #9 il: Maggio 10, 2012, 08:34:18 pm »
Non puoi compilare per il fatto che per Linux non ho preparato nulla.
Si tratta di prendere il codice di Zen e riempire le cose che mancano.

Prenderla alla larga, forse. Come dicevi, da soli è un bagno di sangue, in team si semplifica di molto ;)

Quello che aspiro ad ottenere è una piena compatibilità con Lazarus ;)

ZenGL è una sorta di GLUT scritto in Pascal. Come i vari GLUT non è ad oggetti.
Quello che sto cercando di mettere in piedi è un glut ad oggetti, un vero FW ad oggetti per la creazione di applicazioni 3d. Che siano giochi o altro ;)
Magari un giorno potresti vedere un tuo programmino in 3d ;)
Ad esempio il gioco per imparare ad usare la tastiera, in 3d avrebbe un appeal migliore :D
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:OOPpizzazione...
« Risposta #10 il: Maggio 10, 2012, 09:13:22 pm »
Interessante  :D

Per compilare mancano gli sprites, giusto? Dove li pesco? Vorrei provare a buttare un occhio a zenGL (ho trascorsi con DelphiX, avevo fatto un giochino di carri armati, mai completato...)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:OOPpizzazione...
« Risposta #11 il: Maggio 11, 2012, 08:37:46 am »
ciao Legolas

gli sprite e gli sfondi li trovi qua

http://www.lazaruspascal.it/index.php?topic=307.msg2056#msg2056
Imagination is more important than knowledge (A.Einstein)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:OOPpizzazione...
« Risposta #12 il: Maggio 11, 2012, 08:46:16 am »
Quello che aspiro ad ottenere è una piena compatibilità con Lazarus ;)
ZenGL è una sorta di GLUT scritto in Pascal. Come i vari GLUT non è ad oggetti.
Quello che sto cercando di mettere in piedi è un glut ad oggetti, un vero FW ad oggetti per la creazione di applicazioni 3d. Che siano giochi o altro ;)

se si prende questa strada di limitarsi al giochino non ne vale la pena (era in questo senso "alla larga" ;)). scrivendo dei controlli 3D multipiattaforma per la LCL... "toccherà" dar vita ad un progettino ampio giusto per seguire l'esempio di fpGUI (anche se non l'ho mai usato), giusto per far concorrenza a FireMonkey e giusto per fare delle applicazioni un sacco fighe :D
« Ultima modifica: Maggio 11, 2012, 08:49:05 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:OOPpizzazione...
« Risposta #13 il: Maggio 11, 2012, 09:29:31 am »
 lazarus/examples/openglcontrol/openglcontrol_demo.lpi.

EDIT:
Forse la stavamo prendendo veramente troppo larga ;)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:OOPpizzazione...
« Risposta #14 il: Maggio 11, 2012, 10:47:24 am »
allora la versione 2 del gioco la facciamo 3D?
Imagination is more important than knowledge (A.Einstein)

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19180
  • Topic in totale: 2288
  • Online Today: 97
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 53
Total: 53

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.