Questions pour le jeu.
Re: Questions pour le jeu.
Non, dans plusieurs cas sfml renvoie une structure et pas un pointer, pas de bricolage possible du coup.
Re: Questions pour le jeu.
Exact, de mémoire, dans ma liste todo , je devais modifier le code C en ce sens, pour le moment il faut faire comme ca sans modifié le code source :
Par contre , c'est pas top...
Edit:
J'avais wrappé il y a quelques année en arrière la version 1.6
J'avais modifié toutes les sources ( le wrapper C )
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)
Edit:
J'avais wrappé il y a quelques année en arrière la version 1.6
J'avais modifié toutes les sources ( le wrapper C )
Re: Questions pour le jeu.
Bah ouais, comme je l'ai dit plus haut, je me tâte à tout retoucher du coup... Mais ca doit représenter masse de boulot et mes compétences sont pas au top (CSFML 2.1, c'est mon premier wrapper en fait...)
A vrai dire, je pense qu'on pourrait tous profiter de SFML sous pure, donc j'envisageais aussi d'essayer de lancer un "projet commun" pour les gens d'ici (plutôt que d'avoir à coordonner une armée d'anglais, je me dis que la petite communauté française de pure est très compétente...); vous pensez que ça vaut le coup?
A vrai dire, je pense qu'on pourrait tous profiter de SFML sous pure, donc j'envisageais aussi d'essayer de lancer un "projet commun" pour les gens d'ici (plutôt que d'avoir à coordonner une armée d'anglais, je me dis que la petite communauté française de pure est très compétente...); vous pensez que ça vaut le coup?
Re: Questions pour le jeu.
Question bête, qu’apporte SFML selon vous par rapport à pure ?
Re: Questions pour le jeu.
PB est completement has-been pour la 2D.Jenova a écrit :Question bête, qu’apporte SFML selon vous par rapport à pure ?
Dejà, le support des shaders, le rendu sur texture, les transformations, la modélisation hiéarchique ( rotation répercutée aux enfants ) , les vues , et la liste pourrais s'allonger
PB ne propose que des "sprites" , à toi de faire le reste.
quand j'avais wrappé la sfml , kelebrindae à rajouté des "blob monster" à mon background animé :
http://keleb.free.fr/codecorner/downloa ... erdemo.zip
Re: Questions pour le jeu.
Les vues. C'est LE truc indispensable qui manque à pure, le reste est complètement suffisant pour la plupart des jeux faisables à mon échelle (a condition de régler quelques bugounets ceci dit). Après, ouais, plein de features avancées super pratiques pour faire masse de jolies effets, et puis j'ajouterais aussi un support plus complet des joysticks/manettes ^^;
J'vais regarder ton archive la prochaine fois que je reboot sous windows.
De mon coté, j'ai les modules window (pas en entier à cause du problème cité ci dessus) et system de CSFML fonctionnel sous 5.21...
J'vais regarder ton archive la prochaine fois que je reboot sous windows.
De mon coté, j'ai les modules window (pas en entier à cause du problème cité ci dessus) et system de CSFML fonctionnel sous 5.21...
Dernière modification par poshu le jeu. 23/janv./2014 1:05, modifié 1 fois.
Re: Questions pour le jeu.
ça décoiffe !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
lorsque je t'ai lu que tu disais que "PB est complétement has-been pour la 2D." , je me suis dis , ça y est il exagère encore ...
mais ... apres avoir vu la petit demo avec les zigouigoui qui file avec une fluidité sans nom , je suis sur le cul !
Re: Questions pour le jeu.
@Dobro : Le problème de Fred, je suppose, c'est que les sprites got to play nicely with the 3D engine, and still be able to perform right in standalone mode... I guess it's a lot of trouble for only half of his clients (assuming the application/game maker population is fifty fifty, of course)... Yet, with Spider Basic around the corner, my faith in PB is stronger than ever, and I need some 2D tools so I can continue to prototype games. CSFML is perfect for my needs, both fast and feature rich.
Re: Questions pour le jeu.
G-rom :
j'ai refait ton archive, car j'ai Détypée tes pointeurs du PBI pour le rendre compatible 5.21 (il y en avait beaucoup )
j'ai aussi fait une petite modif (Windows ONLY),sur le code de Demo, qui ne corrige pas ton bug de fin
mais qui supprime automatiquement de la liste des process ...
a condition que le prg s’appel "blobMonster-Demo.exe" (donc ça ne marchera que Si compilé en EXe )
Merci encore pour ton partage
a recuperer ici :
http://michel.dobro.free.fr/Forum_pb/sf ... o_5_21.zip
j'ai refait ton archive, car j'ai Détypée tes pointeurs du PBI pour le rendre compatible 5.21 (il y en avait beaucoup )
j'ai aussi fait une petite modif (Windows ONLY),sur le code de Demo, qui ne corrige pas ton bug de fin
mais qui supprime automatiquement de la liste des process ...
a condition que le prg s’appel "blobMonster-Demo.exe" (donc ça ne marchera que Si compilé en EXe )
Merci encore pour ton partage
a recuperer ici :
http://michel.dobro.free.fr/Forum_pb/sf ... o_5_21.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
Dernière modification par Backup le sam. 25/janv./2014 1:17, modifié 1 fois.
Re: Questions pour le jeu.
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.
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.
Re: Questions pour le jeu.
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.
je supose qu'il n'y a pas trop d'ajout.. et ce qui existe ne dois pas etre bien different de la version Stable .. ?
je n'y connais rien en Wrapping de lib ...
j'ai bien utilisé Dll Viewer, ça affiche le nom des fonctions ... mais pas les Parametres ..
en regardant la Doc, je trouve les parametres , .... mais ça doit etre super long de faire correspondre le tout
Re: Questions pour le jeu.
La SFML comporte 5/6 dll , j'avais tout réuni en une seule en intégrant directement la SFML source dans le wrapp.
Le code est très gros, ca ne s'adapte pas comme ca.
je vais le refaire pour la 2.1
Le code est très gros, ca ne s'adapte pas comme ca.
je vais le refaire pour la 2.1
Re: Questions pour le jeu.
Excellent ....G-Rom a écrit :je vais le refaire pour la 2.1
moi je suis bon , pour la Réedition et corriger les pointeurs Typés ...
alors si il faut passer 2 heures a faire une modif , compte sur moi (bon je me mouille pas trop là )
je ne comprends pas que Fred n'ai pas integré cette lib a Purebasic ...
des problemes de droits ??
Re: Questions pour le jeu.
non, pas directx , exclusivement OpenGL. surement pour cela.
C'est pour cela que je pense que si j'avais été à la place de Fred, je me serais concentré uniquement sur le compilateur et les cibles de ce dernier, des lib comme cela il y en a partout sur le net et pour tout les types d'application.
C'est pour cela que je pense que si j'avais été à la place de Fred, je me serais concentré uniquement sur le compilateur et les cibles de ce dernier, des lib comme cela il y en a partout sur le net et pour tout les types d'application.
Re: Questions pour le jeu.
Y'en a partout maintenant, avant ca n'était pas le cas. De plus intégrer une lib C++ comme celle là ca fairait un exe plutot balèze et je vois deja venir les raleurs !