Re: Questions pour le jeu.
Publié : mar. 21/janv./2014 23:45
Non, dans plusieurs cas sfml renvoie une structure et pas un pointer, pas de bricolage possible du coup.
Code : Tout sélectionner
OpenLibrary(0,"csfml-graphics-2.dll")
PrototypeC.i sfColor_fromRGB(red.a,green.a,blue.a)
Global sfColor_fromRGB.sfColor_fromRGB = GetFunction(0,"sfColor_fromRGB")
*ptr = sfColor_fromRGB(255,128,64)
Debug PeekA(@*ptr)
Debug PeekA(@*ptr+1)
Debug PeekA(@*ptr+2)
PB est completement has-been pour la 2D.Jenova a écrit :Question bête, qu’apporte SFML selon vous par rapport à pure ?
G-Rom a écrit : quand j'avais wrappé la sfml , kelebrindae à rajouté des "blob monster" à mon background animé :
http://keleb.free.fr/codecorner/downloa ... erdemo.zip
Code : Tout sélectionner
; Include SFML 2.0
XIncludeFile "SFML-2.pbi"
;-Ajout Dobro
; ************* pour le PID *****************
Structure PROCESSENTRY33
dwSize.L
cntUsage.L
th32ProcessID.L
th32DefaultHeapID.L
th32ModuleID.L
cntThreads.L
th32ParentProcessID.L
pcPriClassBase.L
dwFlags.L
szExeFile.b[#MAX_PATH]
EndStructure
Declare.L cheater_pid_return(gamewindowtext.s)
Declare cheater_KillProcess (pid)
Declare Fin(gamewindowtext.s)
;**************************************
; ---------------------------------------------------------------------------
;- SCREEN INIT
; ---------------------------------------------------------------------------
; Set video mode;
ExamineDesktops()
Global VideoMode.sfVideoMode
VideoMode\Width = DesktopWidth(0)
VideoMode\Height = DesktopHeight(0)
VideoMode\BitsPerPixel = DesktopDepth(0)
; Set hardware settings
Global Settings.sfContextSettings
Settings\DepthBits = 24 ; ZBuffer de 24 bits
Settings\AntialiasingLevel = 2 ; Niveau d'antialiasing
SettingsMajorVersion = 2 ; Version OpenGL (2.1) pour la 3 , mettre 3.0
Settings\MinorVersion = 0
Global ClearScreen.sfColor
ClearScreen\r = 0
ClearScreen\g = 0
ClearScreen\b = 0
; Open screen
Global window = sfRenderWindow_Create(@VideoMode, "Blobmonster with SFML",#sfFullscreen, @Settings)
sfRenderWindow_ShowMouseCursor(window, #False)
; ---------------------------------------------------------------------------
;-STRUCTURES INIT
; ---------------------------------------------------------------------------
#NB_BUBBLE = 50
Structure bubble
x.f
y.f
scale.f
speed.f
EndStructure
Global Dim bubble.bubble(#NB_BUBBLE-1)
Structure ray
width.f
height.f
color.i
angle.f
period.f
ptimer.l
sizePeriod.f
sizeTimer.l
EndStructure
RayOfGodPosX = DesktopWidth(0)/2
RayOfGodPosY = -512
NbRay = 100
Global Dim rog.ray(NbRay)
; Simple class (Structure in Pure Basic) to hold a 2d coordinate
Structure point_struct
x.f
y.f
EndStructure
; Here's the blob monster type
#NB_MONSTERS = 10
#BLOBSIZE = 32
Structure blobMonster_struct
;x and y coords
x.f
y.f
redVal.a
greenVal.a
blueVal.a
size.f
; Speed, try changing it
speed.f
; Number of nodes along the body, try changing it to 100
segments.i
; Array to hold the points along the body
tail.point_struct[100]
time.f
EndStructure
Global NewList blobMonster.blobMonster_struct()
Global music,rayOfGod_img,bubble_img,background_img,gradient_img,blob_img
Global bubble_sprite,background_sprite,gradient_sprite,rog_sprite,blob_sprite
Global OffScreenSurface,ImageOffScreen,SpriteOffScreen
Global Shader,ImageWave
Global SFX.a
Global i.i
EnableExplicit
;********************************************************
;- --- Macros ---
;********************************************************
;This macro calculates and returns the angle between two 2d coordinates, in degrees
Macro calculateAngle(x1,y1,x2,y2)
Degree(-ATan2(x1 - x2,y1 - y2))
EndMacro
;********************************************************
;- --- Procedures ---
;********************************************************
; The methods used to create / update / draw a blob monster are here because we can't put them
; in the blobMonster structure (PB isn't object oriented)
; Procedure that returns a pointer to a new blob monster object. Pure Basic equivalent (kind of)
; of a constructor in C++/Java
Procedure blobMonsterCreate(inX.f, inY.f)
Protected i.i
Protected *n.blobMonster_struct = AddElement(blobMonster())
;starting point of the blob monster
*n\x = inX
*n\y = iny
*n\segments = 5+Random(10)
*n\size = #BLOBSIZE*0.75 + Random(#BLOBSIZE)
*n\speed = 0.25 + Random(100)/100.0
If Random(100) >= 50
*n\speed = -*n\speed
EndIf
*n\time = Random(10000)
Select Random(4)
Case 0
*n\redVal = 0
*n\greenVal = 255
*n\blueVal = 255
Case 1
*n\redVal = 255
*n\greenVal = 0
*n\blueVal = 255
Case 2
*n\redVal = 0
*n\greenVal = 255
*n\blueVal = 0
Case 3
*n\redVal = 255
*n\greenVal = 127
*n\blueVal = 0
Case 4
*n\redVal = 0
*n\greenVal = 0
*n\blueVal = 255
EndSelect
;give the tail some coordinates, just make them the same as the main x and y for now
For i = 0 To *n\segments - 1
*n\tail[i]\x = inX
*n\tail[i]\y = iny
Next i
ProcedureReturn *n
EndProcedure
Procedure blobMonsterUpdate(*ptrMonster.blobMonster_struct)
Protected i.i
Protected distX.f,distY.f,dist.f
;time is a bit misleading, it's used for all sorts of things
*ptrMonster\time + *ptrMonster\speed
;here the x and y coordinates are updated.
;this uses the following as a basic rule for moving things
;around a point in 2d space:
;x=radius*cos(angle)+xOrigin
;y=raduis*sin(angle)+yOrigin
;this basically is the basis for anything that moves in this example
;
;the 2 lines of code below make the monster move around, but
;you can change this to anything you like, try setting x and y to the mouse
;coordinates for example
*ptrMonster\y = (15 * Cos(Radian(*ptrMonster\time * -6))) + (VideoMode\Height / 2 + ((VideoMode\Height / 2 - 60) * Sin(Radian(*ptrMonster\time * 1.3))))
*ptrMonster\x = (15 * Sin(Radian(*ptrMonster\time * -6))) + (VideoMode\Width / 2 + ((VideoMode\Width / 2 - 120) * Cos(Radian(*ptrMonster\time / 1.5))))
;put the head of the tail at x,y coords
*ptrMonster\tail[0]\x = *ptrMonster\x
*ptrMonster\tail[0]\y = *ptrMonster\y
;update the tail
;basically, the points don't move unless they're further that 7 pixels
;from the previous point. this gives the kind of springy effect as the
;body stretches
For i = 1 To *ptrMonster\segments - 1
;calculate distance between the current point and the previous
distX = (*ptrMonster\tail[i - 1]\x - *ptrMonster\tail[i]\x)
distY = (*ptrMonster\tail[i - 1]\y - *ptrMonster\tail[i]\y)
dist = Sqr(distX * distX + distY * distY)
;move if too far away
If dist >= *ptrMonster\size*0.5
;the (distX*0.2) bit makes the point move
;just 20% of the distance. this makes the
;movement smoother, and the point decelerate
;as it gets closer to the target point.
;try changing it to 1 (i.e 100%) to see what happens
*ptrMonster\tail[i]\x = *ptrMonster\tail[i]\x + (distX * 0.25)
*ptrMonster\tail[i]\y = *ptrMonster\tail[i]\y + (distY * 0.25)
EndIf
Next i
EndProcedure
Procedure blobMonsterDraw(*ptrMonster.blobMonster_struct,targetSurface)
Protected i.i
Protected ang.f, scale.f
;time to draw stuff!
;this sets the blend mode to LIGHTBLEND, or additive blending, which makes
;the images progressively more bright as they overlap
sfSprite_SetBlendMode(blob_sprite, #sfBlendAdd)
;SetColor 0, 200, 150
;###########
;draw the main bit of the body
;start by setting the images handle (i.e the origin of the image) to it's center
;MidHandleImage blob
sfSprite_SetOrigin(blob_sprite,sfImage_GetWidth(blob_img)*0.5,sfImage_GetHeight(blob_img)*0.5)
;begin looping through the segments of the body
For i = 0 To *ptrMonster\segments - 1
;set the alpha transparency vaue to 0.15, pretty transparent
;SetAlpha 0.15
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(*ptrMonster\redVal, *ptrMonster\greenVal, *ptrMonster\blueVal, 40))
;the (0.5*sin(i*35)) bit basically bulges the size of the images being
;drawn as it gets closer to the center of the monsters body, and tapers off in size as it gets
;to the end. try changing the 0.5 to a higher number to see the effect.
;SetScale 1 + (0.5 * Sin(i * 35)), 1 + (0.5 * Sin(i * 35))
scale = 1 + (0.5 * Sin(Radian(i * 35)))
sfSprite_Resize(blob_sprite,*ptrMonster\size*scale,*ptrMonster\size*scale)
;draw the image
sfSprite_SetPosition(blob_Sprite,*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;this next chunk just draws smaller dots in the center of each segment of the body
;SetAlpha 0.8
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(*ptrMonster\redVal, *ptrMonster\greenVal, *ptrMonster\blueVal, 204))
;SetScale 0.1, 0.1
sfSprite_Resize(blob_sprite,*ptrMonster\size*0.1,*ptrMonster\size*0.1)
;draw the image
sfSprite_SetPosition(blob_Sprite,*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
Next i
;#########################
;draw little spikes on tail
;SetColor 255, 255, 255
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(255, 255, 255, 204))
;note that the x and y scales are different
;SetScale 0.6, 0.1
sfSprite_Resize(blob_sprite,*ptrMonster\size*0.6,*ptrMonster\size*0.1)
;move the image handle to halfway down the left edge, this'll make the image
;appear to the side of the coordinate it is drawn too, rather than the
;center as we had for the body sections
;SetImageHandle blob, 0, ImageHeight(blob) / 2
sfSprite_SetOrigin(blob_sprite,0,sfImage_GetHeight(blob_img)*0.5)
;rotate the 1st tail image. basically, we're calculating the angle between
;the last 2 points of the tail, and then adding an extra wobble (the 10*sin(time*10) bit)
;to make the pincer type effect.
;SetRotation 10 * Sin(time * 10) + calculateAngle(*ptrMonster\tail[segments - 1]\x, *ptrMonster\tail[segments - 1]\y, *ptrMonster\tail[segments - 5]\x, *ptrMonster\tail[segments - 5]\y) + 90
sfSprite_SetRotation(blob_sprite,10 * Sin(Radian(*ptrMonster\time * 10)) + calculateAngle(*ptrMonster\tail[*ptrMonster\segments - 1]\x, *ptrMonster\tail[*ptrMonster\segments - 1]\y, *ptrMonster\tail[*ptrMonster\segments - 2]\x, *ptrMonster\tail[*ptrMonster\segments - 2]\y) )
sfSprite_SetPosition(blob_Sprite,*ptrMonster\tail[*ptrMonster\segments - 1]\x, *ptrMonster\tail[*ptrMonster\segments - 1]\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;second tail image uses negative time to make it move in the opposite direction
;SetRotation 10 * Sin(-time * 10) + calculateAngle(*ptrMonster\tail[segments - 1]\x, *ptrMonster\tail[segments - 1]\y, *ptrMonster\tail[segments - 5]\x, *ptrMonster\tail[segments - 5]\y) + 90
sfSprite_SetRotation(blob_sprite,10 * Sin(Radian(-*ptrMonster\time * 10)) + calculateAngle(*ptrMonster\tail[*ptrMonster\segments - 1]\x, *ptrMonster\tail[*ptrMonster\segments - 1]\y, *ptrMonster\tail[*ptrMonster\segments - 2]\x, *ptrMonster\tail[*ptrMonster\segments - 2]\y) )
sfSprite_SetPosition(blob_Sprite,*ptrMonster\tail[*ptrMonster\segments - 1]\x, *ptrMonster\tail[*ptrMonster\segments - 1]\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;#####################
;draw little fins/arms
;SetAlpha 1
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(255, 255, 255, 255))
;begin looping through the body sections again. Note that we don't want fins
;on the first and last section because we want other things at those coords.
For i = 1 To *ptrMonster\segments - 2
;like the bulging body, we want the fins to grow larger in the center, and smaller
;at the end, so the same sort of thing is used here.
;SetScale 0.1 + (0.6 * Sin(i * 30)), 0.05
scale = 0.1 + (0.6 * Sin(Radian(i * 30)))
sfSprite_Resize(blob_sprite,*ptrMonster\size*scale,*ptrMonster\size*0.05)
;rotate the image. We want the fins to stick out sideways from the body (the calculateangle() bit)
;and also to move a little on their own. the 33 * Sin(time * 5 + i * 30) makes the
;fin rotate based in the i index variable, so that all the fins look like they're moving
;one after the other.
;SetRotation 33 * Sin(time * 5 + i * 30) + calculateAngle(*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y, *ptrMonster\tail[i - 1]\x, *ptrMonster\tail[i - 1]\y)
sfSprite_SetRotation(blob_sprite,33 * Sin(Radian(*ptrMonster\time * 5 + i * 30)) + calculateAngle(*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y, *ptrMonster\tail[i - 1]\x, *ptrMonster\tail[i - 1]\y) - 90 )
sfSprite_SetPosition(blob_Sprite,*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;rotate the opposte fin, note that the signs have changes (-time and -i*30)
;to reflect the rotations of the other fin
;SetRotation 33 * Sin(-time * 5 - i * 30) + calculateAngle(*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y, *ptrMonster\tail[i - 1]\x, *ptrMonster\tail[i - 1]\y) + 180
sfSprite_SetRotation(blob_sprite,33 * Sin(Radian(-*ptrMonster\time * 5 - i * 30)) + calculateAngle(*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y, *ptrMonster\tail[i - 1]\x, *ptrMonster\tail[i - 1]\y) + 90 )
sfSprite_SetPosition(blob_Sprite,*ptrMonster\tail[i]\x, *ptrMonster\tail[i]\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
Next i
;
;###################
;center the image handle
; MidHandleImage blob
sfSprite_SetOrigin(blob_sprite,sfImage_GetWidth(blob_img)*0.5,sfImage_Getheight(blob_img)*0.5)
;Draw the eyes. These are just at 90 degrees to the head of the tail.
; SetScale 0.6, 0.6
sfSprite_Resize(blob_sprite,*ptrMonster\size*0.6,*ptrMonster\size*0.6)
; SetColor 255, 0, 0
; SetAlpha 0.3
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(255, 0, 0, 77))
ang = calculateangle(*ptrMonster\tail[0]\x, *ptrMonster\tail[0]\y, *ptrMonster\tail[1]\x, *ptrMonster\tail[1]\y)
sfSprite_SetPosition(blob_Sprite,*ptrMonster\x + (7 * Cos(-Radian(ang - 45))), *ptrMonster\y + (7 * Sin(-Radian(ang - 45))))
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
sfSprite_SetPosition(blob_Sprite,*ptrMonster\x + (7 * Cos(-Radian(ang + 45))), *ptrMonster\y + (7 * Sin(-Radian(ang + 45))))
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;SetScale 0.1, 0.1
sfSprite_Resize(blob_sprite,*ptrMonster\size*0.1,*ptrMonster\size*0.1)
;SetColor 255, 255, 255
;SetAlpha 0.5
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(255, 0, 0, 128))
sfSprite_SetPosition(blob_Sprite,*ptrMonster\x + (7 * Cos(-Radian(ang - 45))), *ptrMonster\y + (7 * Sin(-Radian(ang - 45))))
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
sfSprite_SetPosition(blob_Sprite,*ptrMonster\x + (7 * Cos(-Radian(ang + 45))), *ptrMonster\y + (7 * Sin(-Radian(ang + 45))))
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;draw beaky thing
;SetImageHandle blob, 0, ImageWidth(blob) / 2
sfSprite_SetOrigin(blob_sprite,0,sfImage_Getheight(blob_img)*0.5)
;SetScale 0.3, 0.1
sfSprite_Resize(blob_sprite,*ptrMonster\size*0.3,*ptrMonster\size*0.1)
;SetColor 0, 200, 155
;SetAlpha 0.8
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(200,155,0,204))
;SetRotation ang + 90
sfSprite_SetRotation(blob_sprite,ang)
sfSprite_SetPosition(blob_Sprite,*ptrMonster\x, *ptrMonster\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;yellow light
;MidHandleImage blob
sfSprite_SetOrigin(blob_sprite,sfImage_GetWidth(blob_img)*0.5,sfImage_Getheight(blob_img)*0.5)
;SetScale 4, 4
sfSprite_Resize(blob_sprite,*ptrMonster\size*4,*ptrMonster\size*4)
;SetColor 255, 255, 0
;SetAlpha 0.2
sfSprite_SetColor(blob_sprite,sfColor_FromRGBA(255,255,0,51))
sfSprite_SetPosition(blob_Sprite,*ptrMonster\x, *ptrMonster\y)
sfRenderWindow_DrawSprite(targetSurface,blob_sprite)
;Finished!
EndProcedure
; ---------------------------------------------------------------------------
;-LOAD MEDIAS
; ---------------------------------------------------------------------------
music = sfMusic_CreateFromFile("./Medias/Gameplay4.ogg")
sfMusic_Play(music)
sfMusic_SetLoop(music,1)
rayOfGod_img = sfImage_CreateFromFile("./Medias/rayOfGod.png")
bubble_img = sfImage_CreateFromFile("./Medias/bubble.png")
background_img = sfImage_CreateFromFile("./Medias/background.png")
gradient_img = sfImage_CreateFromFile("./Medias/gradient.png")
blob_img = sfImage_CreateFromFile("./Medias/blob.png")
bubble_sprite = sfSprite_Create()
sfSprite_SetImage(bubble_sprite,bubble_img,1)
background_sprite = sfSprite_Create()
sfSprite_SetImage(background_sprite,background_img,1)
sfSprite_Resize(background_sprite,DesktopWidth(0),DesktopHeight(0))
gradient_sprite = sfSprite_Create()
sfSprite_SetImage(gradient_sprite,gradient_img,1)
sfSprite_Resize(gradient_sprite,DesktopWidth(0),DesktopHeight(0))
rog_sprite = sfSprite_Create()
sfSprite_SetImage(rog_sprite,rayOfGod_img,1)
sfSprite_SetOrigin(rog_sprite,64,0)
sfSprite_SetBlendMode(rog_sprite,#sfBlendAdd)
blob_sprite = sfSprite_Create()
sfSprite_SetImage(blob_sprite,blob_img,1)
sfSprite_SetBlendMode(blob_sprite,#sfBlendAdd)
sfSprite_SetOrigin(blob_sprite,sfImage_GetWidth(blob_img)*0.5,sfImage_GetWidth(blob_img)*0.5)
For i = 0 To #NB_BUBBLE-1
With bubble(i)
\x = Random(DesktopWidth(0))
\y = Random(DesktopHeight(0))
\scale = 0.1 + (Random(10)/30)
\speed = 0.5 + Random(3)
EndWith
Next
For i = 0 To NbRay-1
With rog(i)
\color = RGBA(255,255,255,255)
\width = 16 + Random(32)
\height = 512 + Random(1024)
\angle = Random(130)
\period = Random(20)-Random(20)
\ptimer = 250 + Random(1000)
\sizePeriod = Random(1024)-Random(1024)
\sizeTimer = 250 + Random(1000)
EndWith
Next
If sfRenderImage_IsAvailable()
OffScreenSurface = sfRenderImage_Create(DesktopWidth(0), DesktopHeight(0) , #False) ; On crée l'image
ImageOffScreen = sfRenderImage_GetImage(OffScreenSurface) ; on va la lié à un sprite
SpriteOffScreen = sfSprite_Create() ; on créer un sprite , qui sera le resultats des opérations
sfSprite_SetImage(SpriteOffScreen,ImageOffScreen,#True)
SFX.a = #False
If sfShader_IsAvailable()
Shader = sfShader_CreateFromFile("./Medias/wave.glsl")
ImageWave = sfImage_CreateFromFile("./Medias/wave.jpg")
sfShader_SetTexture(Shader,"texture",ImageOffScreen)
sfShader_SetTexture(Shader,"wave",ImageWave)
SFX = #True
EndIf
EndIf
; Create a blobMonster object
For i = 1 To #NB_MONSTERS
blobMonsterCreate(VideoMode\Width / 2,VideoMode\height / 2)
Next i
DisableExplicit
;- Main loop
TextIndex=-1
Quit = #False
Repeat
If sfRenderWindow_GetEvent(window,@event)
input = sfRenderWindow_GetInput(window)
If sfInput_IsKeyDown(input,#sf_key_Escape)
Quit = #True
EndIf
EndIf
If SFX = #False
sfRenderWindow_Clear(window,@ClearScreen)
;-draw background
sfRenderWindow_DrawSprite(window,background_sprite)
;-Draw bubble
For i = 0 To #NB_BUBBLE-1
With bubble(i)
\y - \speed
If \y+(\scale*128)<0
\x = Random(DesktopWidth(0))-Random(128)
\y = DesktopHeight(0)
\scale = 0.1 + (Random(10)/30)
\speed = 0.5 + Random(3)
EndIf
sfSprite_SetScale(bubble_sprite,\scale,\scale)
sfSprite_SetPosition(bubble_sprite, \x, \y)
sfRenderWindow_DrawSprite(window,bubble_sprite)
EndWith
Next
;-Draw ray of god
For i = 0 To NbRay-1
With rog(i)
px.f = RayOfGodPosX
py.f = RayOfGodPosY
An.f = \angle + \period * Cos(ElapsedMilliseconds()/\ptimer)
Ht.f = \height + \sizePeriod * Cos(ElapsedMilliseconds()/\sizeTimer)
sfSprite_Resize(rog_sprite,\width, Ht)
sfSprite_SetPosition(rog_sprite,px,py)
sfSprite_SetRotation(rog_sprite,An-90)
sfRenderWindow_DrawSprite(window,rog_sprite)
EndWith
Next
;-Draw gradient
sfRenderWindow_DrawSprite(window,gradient_sprite)
sfRenderWindow_Display(window)
Else ; SFX = #true
wx.f = (DesktopWidth(0) /2) + 500 * Cos(ElapsedMilliseconds()/2000)
wy.f = (DesktopHeight(0) /2) + 500 * Sin(ElapsedMilliseconds()/2000)
sfShader_SetParameter2(shader,"offset",wx/DesktopWidth(0),wy/DesktopHeight(0))
sfRenderImage_Clear(OffScreenSurface,@ClearScreen)
;Background
sfRenderImage_DrawSprite(OffScreenSurface,background_sprite)
;-Draw bubble
For i = 0 To #NB_BUBBLE-1
With bubble(i)
\y - \speed
If \y+(\scale*128)<0
\x = Random(DesktopWidth(0))-Random(128)
\y = DesktopHeight(0)
\scale = 0.1 + (Random(10)/30)
\speed = 0.5 + Random(3)
EndIf
sfSprite_SetScale(bubble_sprite,\scale,\scale)
sfSprite_SetPosition(bubble_sprite, \x, \y)
sfRenderImage_DrawSprite(OffScreenSurface,bubble_sprite)
EndWith
Next
sfRenderImage_Display(OffScreenSurface)
sfRenderWindow_Clear(window,@ClearScreen)
sfRenderWindow_DrawSpriteWithShader(window,SpriteOffScreen,Shader)
;-Draw ray of god
For i = 0 To NbRay-1
With rog(i)
px.f = RayOfGodPosX
py.f = RayOfGodPosY
An.f = \angle + \period * Cos(ElapsedMilliseconds()/\ptimer)
Ht.f = \height + \sizePeriod * Cos(ElapsedMilliseconds()/\sizeTimer)
sfSprite_Resize(rog_sprite,\width, Ht)
sfSprite_SetPosition(rog_sprite,px,py)
sfSprite_SetRotation(rog_sprite,An-90)
sfRenderWindow_DrawSprite(window,rog_sprite)
EndWith
Next
;-Draw gradient
sfRenderWindow_DrawSprite(window,gradient_sprite)
ForEach blobMonster()
;update the blobmonster
blobMonsterUpdate(@blobMonster())
;- Draw the monster
blobMonsterDraw(@blobMonster(),window)
Next blobMonster()
sfRenderWindow_Display(window)
EndIf
sfSleep(0.01)
Until Quit=#True
sfMusic_stop(music)
sfMusic_Destroy(music)
sfRenderWindow_Close(window)
sfRenderWindow_Destroy(window)
;--- Ajout Dobro
Fin("blobMonster-Demo")
;MessageRequester("Bug"," le programme bug à cause d'openAL , faut que je trouve pourquoi , merci de me killer dans le gestionnaire de process.")
;--- Ajout Dobro
Procedure.L cheater_pid_return(gamewindowtext.s)
; Laisse cette procedure au dessus des autres, car elle est appelé par les autres
Name.s=UCase(gamewindowtext.s)
Recherche=0
If OpenLibrary(0, "Kernel32.dll")
CreateToolhelpSnapshot = GetFunction(0, "CreateToolhelp32Snapshot")
ProcessFirst = GetFunction(0, "Process32First")
ProcessNext = GetFunction(0, "Process32Next")
If CreateToolhelpSnapshot And ProcessFirst And ProcessNext ; Ensure than all the functions are found
Process.PROCESSENTRY33\dwSize = SizeOf(PROCESSENTRY33)
Snapshot = CallFunctionFast(CreateToolhelpSnapshot, #TH32CS_SNAPPROCESS, 0)
If Snapshot
ProcessFound = CallFunctionFast(ProcessFirst, Snapshot, Process)
While ProcessFound
Nom.s=UCase(PeekS(@Process\szExeFile, -1, #PB_Ascii))
Debug Nom.s
Nom=GetFilePart(Nom)
If FindString(Nom,Name.s,1);;=Name
Recherche =1
pid=Process\th32ProcessID
EndIf
ProcessFound = CallFunctionFast(ProcessNext, Snapshot, Process)
Wend
EndIf
CloseHandle_(Snapshot)
EndIf
CloseLibrary(0)
EndIf
ProcedureReturn pid
EndProcedure
Procedure cheater_KillProcess (pid)
#PROCESS_TERMINATE = $1
#PROCESS_CREATE_THREAD = $2
#PROCESS_VM_OPERATION = $8
#PROCESS_VM_READ = $10
#PROCESS_VM_WRITE = $20
#PROCESS_DUP_HANDLE = $40
#PROCESS_CREATE_PROCESS = $80
#PROCESS_SET_QUOTA = $100
#PROCESS_SET_INFORMATION = $200
#PROCESS_QUERY_INFORMATION = $400
#PROCESS_ALL_ACCESS = #STANDARD_RIGHTS_REQUIRED | #SYNCHRONIZE | $FFF
phandle = OpenProcess_ (#PROCESS_TERMINATE, #False, pid)
If phandle <> #Null
If TerminateProcess_ (phandle, 1)
Result = #True
EndIf
CloseHandle_ (phandle)
EndIf
ProcedureReturn Result
EndProcedure
Procedure Fin(gamewindowtext.s)
pid=cheater_pid_return(gamewindowtext.s)
cheater_KillProcess (pid)
EndProcedure
; ----------------------------------------
; EPB
en partant de ton travail deja énorme , ça devrai pas etre trop long a adapter en Version 2.1 non ?G-Rom a écrit :Merci Dobro, le bug est du à OpenAL et non au Wrapp ou la SFML elle même.
ce wrapp était basé sur une version 2.0 de la SFML lors du passage de la 1.6 à la 2.0, version non stable donc.
ce wrapping n'est donc pas à utilisé pour de la production.
La SFML en est à la version 2.1 en stable.
Excellent ....G-Rom a écrit :je vais le refaire pour la 2.1