begin process at 2010 02 10 08:48:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > BUBBLES : SPRITES TBITMAP

BUBBLES : SPRITES TBITMAP


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :sprite, bitmap, defilement, graphique, bubble Niveau :Débutant Date de création :21/02/2006 Date de mise à jour :21/02/2006 00:23:20 Vu / téléchargé :4 993 / 758

Auteur : ACHPI32

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Hello,

Voici une petite compo sympatique (j'espère) metant en scene des bulles et un petit sous marin (bref ceci est un TALC : Truc à la Co.).

Le but :

Il me fallait un support de test afin de comprendre
"en gros" le fonctionnment des sprites :

Voila doc mon support d'experimentation

J'ai essayé tant qu'a faire d'allier un esprit "utile
et agréable".

Bien entendu, l'ensemble est largement optimisable...
Il faut bien une amorce...

Si vous avez des remarques, suggestions, n'hesitez pas !

Je vous laisse découvrir le projet

@+



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

21 février 2006 00:23:20 :
-

 Sources du même auteur

Source avec Zip IP INTERNET AVEC UN MODEM/ROUTEUR (INDY & SNMP)
Source avec Zip Source avec une capture MSN ID (OBTENIR VOTRE ID MSN À PARTIR DE VOTRE ADRESSE HOTMA...
Source avec Zip FONCTION LONGPATHPARAMSTR
Source avec Zip Source avec une capture PATHTRUNCATE
Source avec Zip DPC - NETTOYEUR DE PROJET DELPHI

 Sources de la même categorie

Source avec Zip Source avec une capture EFFET VITRE ET THUMBNAILS SOUS VISTA par Bacterius
Source avec Zip Source avec une capture ANAGLYPHEUR OU COMMENT VOIR EN RELIEF LES STÉRÉOSCOPES ANCES... par jfs59
Source avec Zip Source avec une capture DÉFORMER UNE IMAGE AUX DIMENSIONS D'UN QUADRANGLE QUELCONQUE... par FFCAST
Source avec Zip Source avec une capture THREAD ET BITMAP (DESSIN AU CRAYON) par barbichette
Source avec Zip Source avec une capture ÉCRAN DE VEILLE FEU D'ARTIFICE par barbichette

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture UNITÉ DE SUPPORT VISTA par Bacterius
Source avec Zip Source avec une capture DIAPORAMA « AVEC DES EFFETS PROFESSIONNELS » par offlake
Source avec Zip Source avec une capture COMPOSANT TSWITCHLED (UNE LED) par Bacterius
Source avec Zip Source avec une capture UNITE GRAPHIQUE IMOD, AVEC EXEMPLE par Bacterius
Source avec Zip Source avec une capture OLDSKOOL BITMAP FONT (POLICE BITMAP) par SiZiOUS

Commentaires et avis

Commentaire de f0xi le 21/02/2006 06:03:41 administrateur CS

c'est plutot comme petit exemple ... rigolo.

coté code, c'est propre mais j'aurais deux ou trois conseil a te refiler :

pour X,Y,X1,Y1 ect... utilise plutot les structure TPoint.
comme ce la tu obtient :

var
  MainForm: TMainForm;

  P1 {X,Y} ,P2 {X1,Y1},P3 {X2,Y2}, SM {SMX,SMY} : TPoint;
  Sprite1, Sprite2, Sprite3 : Tbitmap;


ces structure trés pratique permettent d'ameliorer la lecture du code.
pour definir X et Y en une seule ligne il suffit de faire :

P1 := Point(10,50);

modification en consequance :

procedure XYGenerator;
begin
  SM.X := SM.X-1;
  If SM.X = -70 then SM.X := 320;

  P1.Y := P1.Y - 3;
  If P1.Y < -20 then begin
     P1 := point(Random(15)*Random(25),241);
     If P1.X < 2   then P1.X := 100+Random(100);
     If P1.X > 320 then P1.X := 160;
  end;

  P2.Y := P2.Y - 2;
  If P2.Y < -20 then begin
     P2 := point(Random(5)*Random(35),241);
     If P2.X < 2   then P2.X := 200+Random(10);
     If P2.X > 320 then P2.X := 160;
  end;

  P3.Y := P3.Y - 1;
  If P3.Y < -20 then begin
     P3 := point(Random(5)*Random(35),241);
     If P3.X < 2   then P3.X := 100+Random(100);
     If P3.X > 320 then P3.X := 160;
  end;
end;

procedure SpriteUpdate;
begin
  // grace a "with mainform do" on allege le code
  with MainForm do begin
       Sprite1.Canvas.Draw(0,0,Bubble1.picture.Bitmap);
       Sprite2.Canvas.Draw(0,0,Bubble2.picture.Bitmap);
       Sprite3.Canvas.Draw(0,0,Submarine.picture.Bitmap);
       // idem on allege encore le code
       with ANMBitmap.Canvas do begin
            Draw(P1.X+35, P1.Y, Sprite1);
            Draw(P3.X,    P3.Y, Sprite1);
            Draw(P2.X+5,  P2.Y, Sprite2);
            Draw(P3.X+30+random(2),P3.Y,Sprite2);
            Draw(SM.X,    SM.Y, Sprite3);
       end;
  end;
end;


pour la creation des objets Sprite1 2 et 3 on crée une petite methode sympa :

procedure CreateSprite(var bmp : tbitmap; const W,H : integer);
begin
  if not assigned(bmp) then begin
     bmp := tbitmap.Create;
     bmp.Width := W;
     bmp.Height:= H;
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  DoubleBuffered:=True;
  CreateSprite(sprite1,321,241);
  CreateSprite(sprite2,321,241);
  CreateSprite(sprite3,321,241);
end;

et enfin dans initialization et finalization :

initialization
  Randomize;
  P1 := point(160,240);
  P2 := point(160,240);
  SM := point(320,120);

finalization
  // au lieu de FreeAndNil() on utilise les destructeurs des objets
  Sprite1.Free;
  Sprite2.Free;
  Sprite3.Free;
end.


et enfin le dernier conseil, le timer n'a pas besoin d'etre si rapide pour ce genre de chose.
a 15ms on obtient 66.67 traitement par secondes (~66 Tps)
donc il faut le regler entre 40 et 60ms pour obtenir etre dans un interval 25 a 16 Tps ce qui est largement raisonnable.
aprés ce seras a toi de definir les valeurs de mouvement pour gerer la rapiditée de deplacement des sprites.

Commentaire de ACHPI32 le 21/02/2006 11:18:50

Merci, pour ta participation à l'amelioration de ce code,
Je n'avais jamais utilisé de TPoint.

Je pense que ton nettoyage de code sera utile pour la suite car cela risque de s'encrasser (ah bah ça quand on fait des essais et qu'on ne connais pas toutes les fonctions).

Pour maintenant, ce qu'il faudrait :

Dans un premier temps :

-Améliorer la transparence : effet quand un sprite croise un autre, il se produit un effacement du sprite placé en fond.

-Voir pour une méthode alternative d'affichage (vitesse et eventuellement correction du problème mentionné ci-dessus).

Par la suite :

-Faire scroller le fond c'est a dire avec une image tres longue ou un autre moyen, faire defiler un paysage.

-pouvoir controller le sous marin (clavier ou joystick)

Et plus tard... :

-Ajouter du son (Fmod)
-Système de collision
-Utilisation DirectX ou OpenGL.

Le but Realiser un projet pas a pas (j'insiste sur ce point) qui lors d'une evolution majeure sera posté dans un nouveau topic :

Genre (en gros) :
Bubbles       : Sprites Tbitmap (le projet en cours)
Bubbles v2    : Sprites et interactions
Bubbles v3    : L'environnement sonore
Bubbles final : DirecT X et OpenGL

Donc si quelqu'un est motivé dans ce sens n'hesitez pas, je pense que ce projet peut être interessant.

@+

Commentaire de ACHPI32 le 21/02/2006 11:42:45

Il y a apparement un petit soucis ici...

procedure TMainForm.FormCreate(Sender: TObject);
begin
  DoubleBuffered:=True;
  CreateSprite(sprite1,321,241);
  CreateSprite(sprite2,321,241);
  CreateSprite(sprite3,321,241);
end;

Commentaire de ACHPI32 le 21/02/2006 16:38:08

C'est bon pb corrigé...

Quel *bip censuré* je suis des fois...

Javais omis d'ajouter la méthode

procedure CreateSprite(var bmp : tbitmap; const W,H : integer);
begin
  if not assigned(bmp) then begin
     bmp := tbitmap.Create;
     bmp.Width := W;
     bmp.Height:= H;
  end;
end;

1000 excuses

@pluche

Commentaire de f0xi le 22/02/2006 09:13:54 administrateur CS

haha!

bon, si tu veux tout de suite un truc qui poutre avec de multiple possibilitée et notement la gestion des transparence, tu as plusieurs solution :

utilisation du format ICO ou mieux PNG!

sinon, utilisation de GLScene (en mode 2D) ou autre api bien aboutie qui permet de faire ce genre de chose.

je pense que la GDI va vite ramer en chargeant de plus en plus la scene.
passer par OpenGL ou DirectX vas te permettre d'utiliser pleinement les ressources de la carte graphique et non du CPU.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

dessin sur un bitmap [ par jlg75 ] J'ai commencé un petit prog de dessin pour mes débuts en DELPHI.Je dessine sur un bitmap (feuille blanche pour l'instant),chargé dans une TImage. J'ut Convertir un bitmap en icone [ par sebastienbro ] J'aimerai savoir comment convertir un bitmap, contenu dans une Timage, en icone Convetir une imag en Bitmap [ par sebastienbro ] Je veux convertirune image en ICO, mais il me met une erreur : Image icône incorrectAidez moi !!!!! Graphique sur un TEdit [ par magicvinni ] Bonjour, j'ai un dessin sur la fond de ma fiche et un TEdit dessus mais invisible au debut de l'application. Quand je veux faire un rectangle sur le f Selection graphique [ par jlg75 ] Pb sur mon prog de dessin (DAO). Je souhaite acceder à l'information au niveau pixel pour selectionner l'entite auquel il appartient (cercle,ligne..et Aperçu graphique [ par jlg75 ] ss quelle forme est stocké l'aperçu qui apparait dans la fenetre de dialogue d'ouverture de fichier de Windows? S'agit-t-il d'un bitmap (ou autre form Bitmap, tableau de stockage .... [ par dami ] Bonjour a tous. Pour les besoins d'OpenGL, j'ai besoin de transformer mon Jpeg en BMP puis de stocker le BMP sous forme de tableau. J'ai récupéré et a Commande pour obtenir le nom de sa carte graphique et son ? [ par orelien ] Bonjour,J'aimerais connaître la commande pour obtenir le type de carte graphique et son de mon pc...Merci.Orelien. Graphique [ par sergejb ] SergeJbComment écrire un texte vertical (bas vert haut, ou haut vers bas) avec les méthodes textout, sur un canvas, avec ne fonte vectorielle ou non. Graphique [ par Faust ] Quel est le moyen le plus simple sous delphi pour tracer une courbe ou une droite dans un repère, exactement comme avec une calculatrice graphique.Mer


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales