Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - r3dh4

Pages: [1]
1
Graphique / Re : Simulation de destruction - Combiner les intRect
« le: Juillet 11, 2013, 04:51:57 pm »
Merci beaucoup, je passe en résolu.

2
Graphique / Re : Combiner les intRect
« le: Juillet 11, 2013, 03:03:41 pm »
Voici donc la solution que j'ai appliquée :
adaptation d'une fonction de détection de collision (pixelPerfect) pour modifier le canal Alpha du sprite qui subit les dégâts à son intersection avec un sprite de destruction.

Je peux varier la profondeur des dégâts infligés à l'aide des paramètres getX et getY.
J'espère ne pas choquer l'éthique, en tout cas je suis satisfait du résultat.

        Shared Function FToIRect(fRect As FloatRect) As IntRect
            Return New IntRect(Int(fRect.Left), Int(fRect.Top), Int(fRect.Width), Int(fRect.Height))
        End Function

        '///////////////////////
        ' fonction pixelPerfect détournée
        ' Effet de destruction par modification du canal Alpha
        ' Le spriteA qui subit les dégats devient transparent à l'intersection avec le spriteB (au pixel près)
        '//////////////////////
        Shared Sub makeDamage(spriteA As Sprite, SpriteB As Sprite, getX As Double, getY As Double)

            Dim newColor As New SFML.Graphics.Color
            Dim imgA As Image = spriteA.Texture.CopyToImage
            Dim imgB As Image = SpriteB.Texture.CopyToImage
            Dim boundsA As IntRect = FToIRect(spriteA.GetGlobalBounds)
            Dim boundsB As IntRect = FToIRect(SpriteB.GetGlobalBounds)
            Dim intersection As IntRect
            newColor.A = 0

            ' place le sprite de destrution aux coordonnées demandées
            SpriteB.Position = New SFML.Window.Vector2f(getX, getY)

            If boundsA.Intersects(boundsB, intersection) Then

                Dim inverseA As Transform = SpriteA.InverseTransform
                Dim inverseB As Transform = SpriteB.InverseTransform

                Dim sizeA As SFML.Window.Vector2u = imgA.Size
                Dim sizeB As SFML.Window.Vector2u = imgB.Size

                Dim pixA As Array = imgA.Pixels
                Dim pixB As Array = imgB.Pixels

                Dim vecA, vecB As SFML.Window.Vector2f
                Dim xMax As Integer = intersection.Left + intersection.Width
                Dim ymax As Integer = intersection.Top + intersection.Height

                Dim x, y As Integer
                For x = intersection.Left To xMax
                    For y = intersection.Top To ymax
                        vecA = inverseA.TransformPoint(x, y)
                        vecB = inverseB.TransformPoint(x, y)

                        Dim idxA As Integer = (((CType(vecA.X, Integer) + (CType(vecA.Y, Integer) * sizeA.X)) * 4) + 3)
                        Dim idxB As Integer = (((CType(vecB.X, Integer) + (CType(vecB.Y, Integer) * sizeB.X)) * 4) + 3)

                        If ((vecA.X >= 0) _
                            AndAlso ((vecA.Y >= 0) _
                            AndAlso ((vecB.X >= 0) _
                            AndAlso ((vecB.Y >= 0) _
                            AndAlso ((vecA.X < sizeA.X) _
                            AndAlso ((vecA.Y < sizeA.Y) _
                            AndAlso ((vecB.X < sizeB.X) _
                            AndAlso ((vecB.Y < sizeB.Y) _
                            AndAlso ((pixA(idxA) > 0) _
                            AndAlso (pixB(idxB) > 0)))))))))) Then

                            ' rendre le pixel transparent
                            imgA.SetPixel(vecA.X, vecA.Y, newColor)
                        End If
                    Next
                Next
            End If
            spriteA.Texture = New Texture(imgA)
        End Sub

3
Graphique / Re : Combiner les intRect
« le: Juillet 11, 2013, 12:05:41 pm »
Ok, merci pour le conseil, je vais m'orienter vers la mise à jour du canal alpha.
Je présenterai le résultat obtenu avant de passer en résolu, j'espère y parvenir sans venir t'embêter. :)

4
Bonjour,

Tout d'abord, comme je ne l'ai pas encore fait dans ce forum, je me permets de saluer le travail remarquable fourni par Laurent Gomila qui apporte tant à la communauté des développeurs. Le dernier a m'avoir procuré ce sentiment de totale admiration dans le même registre est Oleg Kolbaski le développeur de LiteCad pour ceux qui connaissent.

Ceci étant dit, j'ai incontestablement besoin de votre aide car je cherche à simuler un effet de destruction par transformation du sprite qui subit les dégats sans avoir recours à l'utilisation de textures dédiées.
Le processus de destruction est simple, le sprite se désagrège (s'émiette) sans effets particuliers (voir fichier joint).

Je pensais donc à redéfinir la zone d'emprise par soustraction d'intRect correspondant à la zone touchée à l'intrect du batiment, je suis pas certain que ce soit possible.

Autre solution envisagée : modifier la texture correspondant au sprite par suppression de pixels dans la zone touchée, pas sûr que ce soit optimal en terme de performances.

Y-a-t-il des méthodes conseillées ?

5
Fenêtrage / Re : SFML VB.NET Event Window.closed
« le: Juillet 09, 2013, 09:54:04 pm »
Yes, c'était bien ça, intervention décisive de Maître Laurent qui m'a mis sur la voie.
ça fonctionne à présent, voir ci-dessous pour exemple.

Merci à vous deux.

sub gameThread()
    dim wndGame as sfml.graphics.renderWindow
    AddHandler wndGame.Closed, AddressOf OnClosed
end sub
 


   
Sub OnClosed(sender As Object, e As EventArgs)
    Dim window As RenderWindow = DirectCast(sender, RenderWindow)
    window.Close()
End Sub
 

6
Fenêtrage / Re : SFML VB.NET Event Window.closed
« le: Juillet 09, 2013, 05:57:55 pm »
Merci RadicalEd, ça donnerait quelque chose du genre :
 
 AddHandler sfml.window.Closed, AddressOf Me.OnClosed
 
 
   Private Sub OnClosed(sender As Object, e As EventArgs)
        Dim window As RenderWindow = DirectCast(sender, RenderWindow)
        window.Close()
    End Sub

mais l'événement sfml.window.Closed n'est pas répertorié.

Je suppose que je vais devoir me contenter de créer ma fenêtre SFML sous la forme New RenderWindow(Form1.Handle) et gérer les événements de la form1 plutôt que ceux de la sfml.window.

7
Fenêtrage / [Résolu] SFML VB.NET Event Window.closed
« le: Juillet 09, 2013, 01:05:47 am »
Bonjour,

Je développe un jeu en VB.net avec le binding .NET de SFML (une hérésie pour les pro C++, je vais me faire recevoir !). J'ai pas mal avancé dans mon projet mais j'arrive à un point bloquant concernant la gestion des événements de l'objet Window.

J'ai l'habitude de m'appuyer sur les exemples en C# ou C++ pour comprendre les fonctionnalités de la librairie et les appliquer à VB.net, mais sur ce point précis je suis bloqué.

Pas compris par exemple comment instancier et gérer ne serait-ce que l'événement window.closed. Quelqu'un aurait un exemple basique ?

Merci de votre aide !

8
Désolé, mais l'exécutable en téléchargement met en panique mon anti-virus...

9
Discussions générales / Re : SFML et Delphi
« le: Juin 25, 2013, 11:09:12 pm »
Ok, merci pour la réponse rapide !  :o
Un peu triste quand même, je ne suis pas accro au C++, je vais sans doute me tourner vers python pour créer des applis facilement portables donnant accès à SFML.

10
Discussions générales / SFML et Delphi
« le: Juin 25, 2013, 06:58:19 pm »
Bonjour et bravo pour cette admirable Librairie.

Testée sous .Net (c# et vb), nickel.

Une adaptation à Delphi est-elle envisagée ?



Pages: [1]