IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Sprite (graphics) to BitmapData pour detection de collision [Flex4]


Sujet :

Flex

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut Sprite (graphics) to BitmapData pour detection de collision
    Bonjour, j'ai besoin de convertir un SpriteVisualElement en bitmapdata pour pouvoir faire un hitTest par la suite. Car si je fais un hittest directement sur l'objet sprite, la collision ne réagit pas en fonction de la forme réelle mais en fonction du rectangle englobant. (Détection de collision au niveau des pixels)

    après une multitude d'essais je me retrouve avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		override public function getBitmap():BitmapData{
    			var bounds:Rectangle = sprite.getBounds(gardenEditor.plan);
    			if(bounds.width && bounds.height){
    				sprite.width = bounds.width;
    				sprite.height = bounds.height;
    				var bmp:BitmapData = new BitmapData(bounds.width,bounds.height,true,0x00000000);
    				bmp.draw(sprite,new Matrix());
    				return bmp;
    			}
    			return null;
    		}
    j'étais obligé de faire un "getBounds" car (je ne sais pas si c'est normal) j'ai le sprite.width et sprite.height à 0 dans tous les cas, et le constructeur BitmapData n'accepte pas ça.

    Voila une des sources dont je me suis inspiré : http://stackoverflow.com/questions/1...ics-into-bytes

    je precise quand même que mon sprite apparait parfaitement bien, j'obtiens juste une image vide quand j'essai de la convertir en BitmapData.

    merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    J'ai un début de solution je crois, mais c'est pas encore gagné.
    J'ai fais une petite appli pour tester avec le strict minimum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    			   xmlns:s="library://ns.adobe.com/flex/spark" 
    			   xmlns:mx="library://ns.adobe.com/flex/mx" 
    			   minWidth="955" minHeight="600"
    			   creationComplete="application1_creationCompleteHandler(event)">
    	<fx:Script>
    		<![CDATA[
    			import mx.events.FlexEvent;
     
    			protected function application1_creationCompleteHandler(event:FlexEvent):void
    			{
    				sprite.graphics.lineStyle(2, 0x000000,1,false,LineScaleMode.NONE);
    				sprite.graphics.beginFill(0xff0033,0.5);
    				sprite.graphics.drawCircle(45,45,20);
    				var bounds:Rectangle = sprite.getBounds(this);
    				sprite.width = bounds.width;
    				sprite.height = bounds.height;
    				label.text = sprite.width+" x "+sprite.height;
     
    				var bmp:BitmapData = new BitmapData(sprite.width,sprite.height,true,0x00000000);
    				bmp.draw(sprite,new Matrix());
    				img.source = bmp;
    			}
     
    		]]>
    	</fx:Script>
    	<fx:Declarations>
    		<!-- Placer ici les éléments non visuels (services et objets de valeur, par exemple). -->
    	</fx:Declarations>
    	<s:layout>
    		<s:VerticalLayout/>
    	</s:layout>
    	<s:SpriteVisualElement id="sprite">
    	</s:SpriteVisualElement>
    	<s:Image id="img"/>
    	<s:Label id="label"/>
    </s:Application>
    et j'obtiens ça :



    Donc si je voyais pas l'image c'était parce qu'elle était pas cadré, mais pourquoi les dimensions du sprite ne se mettent pas à jour?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    Bon... problème à peu près résolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    override public function getBitmap():BitmapData{
    			var bounds:Rectangle = sprite.getBounds(this);
    			if(bounds.width && bounds.height){
    				var bmp:BitmapData = new BitmapData(bounds.x+bounds.width,bounds.y+bounds.height,true,0x00000000);
    				bmp.draw(sprite,new Matrix());
    				return bmp;
    			}
    			return null;
    		}
    c'est pas optimal car si la shape est dessinée à x:1000, y:1000 on se retrouve avec un bitmap de 1040*1040 pour une shape de 40*40 :S
    mais bon... ça ira pour l'instant

    PS: petit tuto très interressant concernant les bitmapData, Sprite & hitTest

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. detection de collision pour interface haptique
    Par fleurdelys77 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 15/02/2011, 20h15
  2. Quelle API pour detecter un Exe qui s'execute.
    Par caviar dans le forum MFC
    Réponses: 3
    Dernier message: 20/04/2006, 13h26
  3. Detecter des collisions
    Par jmoati dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 10/04/2005, 16h22
  4. Méthode simple pour gérer les collisions
    Par Hyoga dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/02/2005, 13h43
  5. Réponses: 13
    Dernier message: 23/12/2004, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo