-
Bonjour,
Commençant à découvrir la version 2.0, je me retrouve avec plusieurs problème, comme celui-ci:
Impossible de trouver le point d'entrée 'sfImage_createMaskFromColor' dans la DLL 'csfml-graphics-2'.
Qui vient du code:
Dim mama As Image = New Image("teste2.png")
mama.CreateMaskFromColor(mama.GetPixel(0, 0))
Merci de m'éclairer dans ce code défectueux ^^
-
C'est un problème connu, la fonction n'est pas exportée dans CSFML. Mais je n'ai aucune idée de pourquoi, j'ai vérifié le code 10 fois et il n'y a rien de spécial sur cette fonction.
-
Ah pardon, en fait il y avait une erreur assez évidente sur cette fonction, j'ai dû confondre avec autre chose.
-
Est-ce que c'est pareil avec VertexArray ?
Impossible de charger la DLL 'csfml-graphics-2': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)
Cela vient de la ligne :
Dim lolilol As New VertexArray
Mais j'pref mettre tout le code ^^"
Code:
Imports System
Imports System.Threading
Imports System.Diagnostics
Imports SFML.Audio
Imports SFML.Window
Imports SFML.Graphics
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Dim lolilol As New VertexArray
Dim Rendu As New RenderWindow(Me.Handle)
Rendu.SetFramerateLimit(50)
While (Rendu.IsOpen And Me.Visible)
System.Windows.Forms.Application.DoEvents()
lolilol(0) = New Vertex(New Vector2f(10, 0))
lolilol(1) = New Vertex(New Vector2f(20, 0))
lolilol(2) = New Vertex(New Vector2f(30, 2))
lolilol(3) = New Vertex(New Vector2f(40, 5))
Rendu.Draw(lolilol)
Rendu.Display()
lolilol.Dispose()
lolilol = New VertexArray
End While
lolilol.Dispose()
Rendu.Dispose()
End Sub
End Class
-
Tu veux dire que sans la déclaration du VertexArray ça fonctionne ? Parce que si la DLL est introuvable, a priori ça vaut pour tout le module graphique.
-
En faite, seul la fonction VertexArray ne fonctionne pas, pour exemple, j'ai fait un test:
J'ai fait mon code, avec déclaration et ajout de XX(0).position = ...
Et l'autre avec juste la déclaration.
Au final, la première se ferme aussi vite qu'elle s'ouvre sans montrer d'erreur.
La deuxième, elle, fonctionne dur comme fer.
C'est quelque peu embêtant ^^
-
J'ai pas tout compris là ;D
-
J'ai du mal à m'exprimer la dessus, je l'avoue =P
Alors, c'est parti !
Imports System
Imports System
.ThreadingImports System
.DiagnosticsImports SFML
.AudioImports SFML
.WindowImports SFML
.GraphicsPublic Class Form1
Private Sub Form1_Load
(ByVal sender
As System
.Object,
ByVal e
As System
.EventArgs) Handles MyBase.Load End Sub Private Sub Form1_Shown
(ByVal sender
As Object,
ByVal e
As System
.EventArgs) Handles Me.Shown Dim lolilol
As New VertexArray
'lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(255, 255, 0, 0))) 'lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(255, 0, 255, 0))) 'lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(0, 255, 255, 0))) 'lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(255, 255, 255, 0))) 'lolilol(0) = New Vertex(New Vector2f(10, 0)) 'lolilol(1) = New Vertex(New Vector2f(20, 0)) 'lolilol(2) = New Vertex(New Vector2f(30, 2)) 'lolilol(3) = New Vertex(New Vector2f(40, 5)) Dim Intef, deux
As Integer Dim Rendu
As New RenderWindow
(Me.Handle) Dim forme
As New VertexArray
() Dim Mlie
As Stopwatch
= New Stopwatch
() Dim I2
As New Image
("teste.png") 'I2.CreateMaskFromColor(I2.GetPixel(0, 0)) Dim I3
As New Texture
(I2
) Dim S
As New Sprite
(I3
) Dim H, W, H1, H2, H3, H4, L1, L2, L3, L4
As Long Dim Tick
As Integer = Environment
.TickCount And Int32
.MaxValue Dim Tick2
As String Dim BoolH
As Boolean = True Dim BoolR
As Boolean = True Dim arial
= New Font
("arial.ttf") Dim Musics
= New Music
("LaZik") Dim De
As TimeSpan
Musics
.Play() Rendu
.SetFramerateLimit(50) H1
= 0 H2
= 32 H3
= 1 H4
= 1 L1
= 5 L2
= 0 L3
= 0 L4
= 0 H
= 32 W
= 3 Mlie
.Start() While (Rendu
.IsOpen And Me.Visible) System
.Windows.Forms.Application.DoEvents() 'Rendu.Clear(New Color(0, 0, 0)) Mlie
.Stop() De
= Mlie
.Elapsed Intef
= Val(Mlie
.ElapsedMilliseconds.ToString) If Intef
= 0 Then Intef
= 1 End If deux
= 1 * 1000 / Intef
Mlie
.Restart() lolilol
.Append(New Vertex
(New Vector2f
(0,
50),
New Color
(255,
255,
0,
0))) lolilol
.Append(New Vertex
(New Vector2f
(0,
50),
New Color
(255,
0,
255,
0))) lolilol
.Append(New Vertex
(New Vector2f
(0,
50),
New Color
(0,
255,
255,
0))) lolilol
.Append(New Vertex
(New Vector2f
(0,
50),
New Color
(255,
255,
255,
0))) S
.Position = New Vector2f
(32,
32) 'S.SubRect = New IntRect(H1, 0, H2, 32) S
.Color = New Color
(0,
0,
0,
127) S
.Position = New Vector2f
(0,
0) S
.Rotation = -10 S
.Scale = New Vector2f
(1,
1) Rendu
.Draw(S
) S
.Position = New Vector2f
(32,
32) S
.Color = New Color
(255,
255,
255,
255) S
.Rotation = 0 Rendu
.Draw(lolilol
) Rendu
.Draw(S
) Rendu
.Display() Tick
= Environment
.TickCount And Int32
.MaxValue Tick2
= Tick
Me.Text = deux
.ToString If L1
< 256 And L1
> -1 Then If L1
= 255 Then L4
= 1 End If If L1
= 0 Then L4
= 0 End If If L4
= 0 Then L1
= L1
+ 1 End If If L4
= 1 Then L1
= L1
- 1 End If End If If Tick2
(6) = "2" And BoolR
= True Or Tick2
(6) = "7" And BoolR
= True Then BoolR
= False H4
= H4
+ 1 If H4
= 10 Then H4
= 0 End If If H1
= 0 Then H1
= 32 H2
= 64 ElseIf H1
= 32 And H3
= 1 Then H1
= 64 H2
= 96 H3
= 0 ElseIf H1
= 64 Then H1
= 32 H2
= 64 ElseIf H1
= 32 And H3
= 0 Then H1
= 0 H2
= 32 H3
= 1 End If ElseIf Tick2
(6) = "3" And BoolR
= False Or Tick2
(6) = "8" And BoolR
= False Then BoolR
= True End If lolilol
.Dispose() lolilol
= New VertexArray
S
.Dispose() S
= New Sprite
(I3
) End While Musics
.Stop() S
.Dispose() Musics
.Dispose() arial
.Dispose() I2
.Dispose() Rendu
.Dispose() End SubEnd Class
Voilà le probleme: le code ci-dessus fonctionne, sans afficher le VertexArray (lolilol)
Je ne sais pas si VertexArray.Append ajoute bien un point de la figure, mais pas de figure affichée sur l'application.
Si je remplace les .append par des lolilol(0).position = new blablabla, l'application se lance et provoque un arrêt immédiat de l'application, sans mettre d'erreur.
J'ai pu remarquer par différents tests que le problème se trouve sur les .position
Est-ce un énorme problème de code, ou bien normal ? ^^"
-
Je ne sais pas si VertexArray.Append ajoute bien un point de la figure, mais pas de figure affichée sur l'application.
Ah, dans ce cas il faut se concentrer sur ça alors. C'est possible d'avoir un code minimal qui produit uniquement le problème, sans toutes ces fioritures ?
Si je remplace les .append par des lolilol(0).position = new blablabla, l'application se lance et provoque un arrêt immédiat de l'application, sans mettre d'erreur.
C'est comme un tableau, si tu accèdes à un élement du vertex array qui n'existe pas, ça plante ;)
Et... où est passée cette erreur de module csfml-graphics-2 introuvable ?
-
Si jamais je transforme le code précédent en:
Imports System
Imports System.Threading
Imports System.Diagnostics
Imports SFML.Audio
Imports SFML.Window
Imports SFML.Graphics
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Dim lolilol As New VertexArray
Dim Rendu As New RenderWindow(Me.Handle)
Rendu.SetFramerateLimit(50)
While (Rendu.IsOpen And Me.Visible)
System.Windows.Forms.Application.DoEvents()
lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(255, 255, 0, 0)))
lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(255, 0, 255, 0)))
lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(0, 255, 255, 0)))
lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(255, 255, 255, 0)))
Rendu.Draw(lolilol)
Rendu.Display()
lolilol.Dispose()
lolilol = New VertexArray
End While
lolilol = New VertexArray
Rendu.Dispose()
End Sub
End Class
L'erreur: Impossible de charger la DLL 'csfml-graphics-2': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)
Celle-ci apparaît seulement sur un code cours, d'après ce que je peux voir.
L'erreur apparaît sur la ligne Dim lolilol As New VertexArray
Si je remplace VertexArray par VertexArray(), cela provoque la même erreur.
-
Celle-ci apparaît seulement sur un code cours, d'après ce que je peux voir.
Permet moi de douter que ce soit la vraie raison ;D
Ca part un peu dans tous les sens, essaye de faire des tests rigoureux sur des exemples minimaux. Et ensuite, on essayera de les prendre un à la fois si tu veux bien.
-
Après réflexion, et vérification, les librairies d'extension n'ont pas été correctement copié.
Par contre, toujours un problème: le Draw
Je n'ai toujours pas de polygone(ici carré) qui s'affiche dans le code suivant:
Dim lol As PrimitiveType = PrimitiveType.Quads
Dim lolilol As New VertexArray(lol)
Dim Rendu As New RenderWindow(Me.Handle)
Rendu.SetFramerateLimit(50)
While (Rendu.IsOpen And Me.Visible)
System.Windows.Forms.Application.DoEvents()
lolilol.Append(New Vertex(New Vector2f(0, 50), New Color(255, 255, 0, 0)))
lolilol.Append(New Vertex(New Vector2f(50, 50), New Color(255, 0, 255, 0)))
lolilol.Append(New Vertex(New Vector2f(50, 0), New Color(0, 255, 255, 0)))
lolilol.Append(New Vertex(New Vector2f(0, 0), New Color(255, 255, 255, 0)))
Rendu.Draw(lolilol)
Rendu.Display()
lolilol.Dispose()
lolilol = New VertexArray(lol)
End While
lolilol.Dispose()
Rendu.Dispose()
Comment faire pour passer le tableau en formes géométrique ?
Le PrimitiveType est-il utile ?
Merci d'avance, et désolé du dérangement ^^"
-
Il manque un Render.Clear() dans ta boucle. Et pourquoi recréer le vertex array à chaque tour de boucle ?
Mais surtout, ton problème, c'est que toutes les couleurs que tu utilises ont un alpha à 0 (totalement transparent).
Le PrimitiveType est-il utile ?
Non, je l'ai mis là pour faire beau :)
Sans rire, oui, ça définit comment les points de ton vertex array seront interprétés en formes géometriques.
-
T'as pas oublié une fonction genre:
Laurent.MerciBeaucoup
ou encore
Laurent.OnT_Aime
? =P
Merci beaucoup, je pensais que le Alpha = 0 était visible, alors que 255 était invisible.
Le but de recréer à chaque fois me permet de faire varier les couleurs, en faisant des dégradés variables.
Rendu.Clear() ne change rien, si je comprend bien, c'est pour repartir d'un écran noir entre chaque fonction ?
En tous cas, merci beaucoup pour ton aide =D
A quand une release avec CreateMaskFromColor de corrigé ? =D
Et qu'est devenu le SubRect ?
-
Le but de recréer à chaque fois me permet de faire varier les couleurs, en faisant des dégradés variables.
Tu peux simplement changer les couleurs des vertexs existant, au lieu de tout recréer.
Rendu.Clear() ne change rien, si je comprend bien, c'est pour repartir d'un écran noir entre chaque fonction ?
Oui. Mais ça ne sert pas à rien. C'est comme si tu commençais à dessiner sur une feuille qui contient déjà le dessin de ton voisin, au lieu d'être blanche.
A quand une release avec CreateMaskFromColor de corrigé ?
Peut-être bientôt, peut-être pas ;D
Et qu'est devenu le SubRect ?
TextureRect.
-
Ha oui, pas bête ! =P
C'est juste que, pendant un moment, j'avais u problème avec la gestion des performances, qui commençaient vers 500 FPS pour finir 5 minutes plus tard à 10 FPS.
J'avais trouvé cela bien de détruire pour reconstruire, au lieu d'accumuler, à tord ?
Personnellement, Rendu.Clear() ou rien, ne change rien, étant donné que je redessine sur toute la surface, mais cela pourrait être utile dans l'avenir, merci ^^
TextureRect revient à faire un IntRect ?
Et j'attend la release final avec impatience, merci chère développeur =P
Sinon, le module Réseau et le module Système ne fonctionne pas avec les Dot Net ?
-
J'avais trouvé cela bien de détruire pour reconstruire, au lieu d'accumuler, à tord ?
Tu n'accumules pas, tu modifies ce qui existe. C'est forcément mieux que de tout réallouer et redéfinir à chaque fois.
Personnellement, Rendu.Clear() ou rien, ne change rien, étant donné que je redessine sur toute la surface, mais cela pourrait être utile dans l'avenir, merci ^^
Si tu remplis toute la fenêtre alors effectivement tu peux l'omettre.
TextureRect revient à faire un IntRect ?
TextureRect est le nouveau nom de SubRect, donc ça prend toujours un IntRect oui. N'hésite pas à consulter la doc.
Sinon, le module Réseau et le module Système ne fonctionne pas avec les Dot Net ?
Ils ne sont pas nécessaires, le framework .Net est suffisament fourni de ce côté.