AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-40%
Le deal à ne pas rater :
-40% sur le Pack Gaming Mario PDP Manette filaire + Casque filaire ...
29.99 € 49.99 €
Voir le deal

 

 [PureBasic]Topic Aide

Aller en bas 
4 participants
AuteurMessage
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyLun 7 Mar 2011 - 18:45

Je crée le topic aide pour le purebasic, je commence avec :

Bon voilà je me suis mis au purebasic et j’essaie de faire un système de collision, mais pour le faire j'ai besoin des structures, j'ai donc rechercher et j'ai fais ce code qui ne marche pas, j'ai une erreur.
Code:
#fenetre=0
#LARGEUR_TILE=32
#HAUTEUR_TILE=32

Structure box
    x.l
    y.l
    w.l
    h.l
  EndStructure
 
Structure object
    x.l
    y.l
    sprite_index.l
EndStructure


 Procedure place_free(x,y)
  i1 = solid\x/#LARGEUR_TILE
  j1 = solid\box.y/#HAUTEUR_TILE
  i2 = (solid\box.x + solid.box\w -1)/#LARGEUR_TILE
  j2 = (solid\box.x + solid.box\h -1)/#HAUTEUR_TILE
 
  For i=i1 To i2 Step 1
    For j=j1 To j2 Step 1
        If Global TileIsMur[i,j]
          Return false;
        EndIf
       
        Next
  Next
     
      Return true; 
 EndProcedure
 
 
Global Dim TileIsMur.l(2,2)
 
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

OpenScreen(640, 480, 16, "Sprite")
sprite_zozor=LoadSprite(sprite, "image/zozor.bmp", 0)



Global Dim solid.box(10)
Dim obj_player.object(0)

solid(0)\x = 0
solid(0)\y = 0
solid(0)\w =32
solid(0)\h =32
TileIsMur(0,0) = 1

obj_player(0)\x = 50
obj_player(0)\y = 50
obj_player(0)\sprite_index = sprite_zozor

Repeat
  FlipBuffers()
  ClearScreen(RGB(0,0,0))
  ExamineKeyboard()
 
 
    If KeyboardPushed(#PB_Key_Left)
      x-1
    EndIf
 
   
    DisplaySprite(sprite,x,y)
   
 Until KeyboardPushed(#PB_Key_Escape)

Bon c'est assez le fouillis mais bon le tuto du site du zero n'explique ni les structure et ni les tableau.

edit : voilà l'erreur : "Ligne 20: la variable suivante n'a pas de "structure" associée: solid"


Dernière édition par jbg77 le Mer 9 Mar 2011 - 17:26, édité 2 fois
Revenir en haut Aller en bas
ombre
Utilisateur confirmé: Rang ***
ombre


Messages : 689
Localisation : Dans sa batcave.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyLun 7 Mar 2011 - 20:04

en gros en faisant solid\x tu accèdes à la valeur x si tu as déclaré solid comme étant une structure, ce n'est pas le cas, au début de ta procédure, ajoute juste ;
solid.box, comme sa purebasic saura que tu déclare solid comme étant un élément basé sur la structure box... Par contre, je comprends pas ton code, il est bourré de faute ! La liste des bugs rencontrés :
Code:
 solid\box.y
Là c'est comme si tu voulais accéder au champ 'box' d'une structure :
Code:
Structure solid
box.d
...
endstructure
Il suffit juste de mettre ;
Code:
solid\y
Tu as le même genre d'erreur un peu partout à ce niveau là.

Code:
If Global TileIsMur[i,j]
Première erreur les tableaux en purebasic ce sont des parenthèses () et non des []. Seconde erreur, global est inutile, sa provoque même une erreur, si une variable est global pas besoin de préciser à chaque fois qu'elle est global. De plus tu déclare la variable après la procédure ! Ce qui produit une erreur, si tu veux un conseil, ton code organise le comme ceci :

Constantes
Variables globales
Structures
Déclaration de procédures
Macro
Procédures
Boucle principal

L'ordre est important, comme sa, si tu utilises une structure, variables, ou une constantes dans une procédure elles seront bien déclaré !


Code:
Return false;
; inutile, en purebasic sa permet de faire des commentaires
return c'est une erreur classique il faut mettre en réalité procedurereturn
false est dans ce cas là une variable, je présume que tu pensais à la 'constante' false => #false
Tu as les même erreur pour #true

Hormis sa, je penses que sa devrait marcher (j'ai pas regardé, j'ai juste lancer plusieurs fois mon compilateur en regardant les erreurs qu'il trouvait)

Code revue et corrigé :
Code:
#fenetre=0
#LARGEUR_TILE=32
#HAUTEUR_TILE=32

Structure box
    x.l
    y.l
    w.l
    h.l
  EndStructure
 
Structure object
    x.l
    y.l
    sprite_index.l
EndStructure

Global Dim TileIsMur.l(2,2)

Procedure place_free(x,y)
  solid.box
  i1 = solid\x/#LARGEUR_TILE
  j1 = solid\y/#HAUTEUR_TILE
  i2 = (solid\x + solid.box\w -1)/#LARGEUR_TILE
  j2 = (solid\x + solid.box\h -1)/#HAUTEUR_TILE
 
  For i=i1 To i2 Step 1
    For j=j1 To j2 Step 1
        If TileIsMur(i,j)
          ProcedureReturn #False;
        EndIf
       
        Next
  Next
     
      ProcedureReturn #true; 
 EndProcedure
 
 
 
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

OpenScreen(640, 480, 16, "Sprite")
sprite_zozor=LoadSprite(sprite, "image/zozor.bmp", 0)



Global Dim solid.box(10)
Dim obj_player.object(0)

solid(0)\x = 0
solid(0)\y = 0
solid(0)\w =32
solid(0)\h =32
TileIsMur(0,0) = 1

obj_player(0)\x = 50
obj_player(0)\y = 50
obj_player(0)\sprite_index = sprite_zozor

Repeat
  FlipBuffers()
  ClearScreen(RGB(0,0,0))
  ExamineKeyboard()
 
 
    If KeyboardPushed(#PB_Key_Left)
      x-1
    EndIf
 
   
    DisplaySprite(sprite,x,y)
   
 Until KeyboardPushed(#PB_Key_Escape)
Revenir en haut Aller en bas
http://www.3arks.com
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyLun 7 Mar 2011 - 20:08

Merci, d'avoir corriger le code, c'est très sympa, les conseilles aussi.
J'ai commencé à apprendre le purebasic cette après-midi donc je suis un gros débutant Yum!
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
Linky439


Messages : 2643
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyLun 7 Mar 2011 - 20:13

Ombre, certifié pro du PB cool

_________________
Cliquez pour accéder aux topics dédiés !
[PureBasic]Topic Aide I4AWwEs    [PureBasic]Topic Aide CaVn0FN
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMar 8 Mar 2011 - 18:00

Excellent si tu te mets au purebasic ! Very Happy

Comment va y avoir plein de nouveaux en purebasic , on va se sentir moins seul avec Ombre Smile.

Sinon, pour les collisions, tu as aussi :
spriteCollision() et SpritepixelCollision(), mais il faut les utiliser avec précaution.

EDIT :

sinon, un "ami" du forum purebasic vient de me donner un lien sur les collisions, et voici le code du lien :

Code:

; ********************************************************
; ***
; ***  Collision Macros / Procedures
; ***
; ***  by Kaeru Gaman 2006-07-02
; ***
; ***  PB Ver 4.0
; ***
; ********************************************************

; ***
; ***  Absolute Value
; ***

Macro AbsEx(Expression)
  ( ( ((Expression) >= 0 Or 0) *2 - 1  ) * (Expression) )
EndMacro

Procedure P_AbsEx(Wert)
 
  If Wert < 0
    wert *-1
  EndIf

  ProcedureReturn Wert

EndProcedure

; ***
; ***  Standard Collision, equal to SpriteCollision()
; ***

Macro StdColl(x1,y1,a1,b1,x2,y2,a2,b2)
(0 Or (0>=((0 Or (x1 < x2))*(x2 - (x1 + a1)))+((0 Or (x1 >= x2))*(x1 - (x2 + a2)))))And(0 Or (0>=((0 Or (y1 < y2))*(y2 - (y1 + b1)))+((0 Or (y1 >= y2))*(y1 - (y2 + b2)))))
EndMacro

Procedure P_StdColl(x1,y1,a1,b1,x2,y2,a2,b2)
  Coll = #False
 
  If x1 < x2
    dx = x2 - (x1 + a1)
  Else
    dx = x1 - (x2 + a2)
  EndIf
  If y1 < y2
    dy = y2 - (y1 + b1)
  Else
    dy = y1 - (y2 + b2)
  EndIf
 
  If dx < 0 And dy < 0
    Coll = #True
  EndIf
 
  ProcedureReturn Coll

EndProcedure

; ***
; ***  Bounding Box
; ***

Macro BoundBoxColl(x1,y1,a1,b1,x2,y2,a2,b2)
( ( 0 Or ((AbsEx(x1-x2) - a1 - a2)<0)) And ( 0 Or ((AbsEx(y1-y2) - b1 - b2)<0)) )
EndMacro

Procedure P_BoundBoxColl(x1,y1,a1,b1,x2,y2,a2,b2)
  Coll = #False
 
  dx = P_AbsEx(x1-x2) - a1 - a2
  dy = P_AbsEx(y1-y2) - b1 - b2
 
  If dx < 0 And dy < 0
    Coll = #True
  EndIf
 
  ProcedureReturn Coll

EndProcedure

; ***
; ***  Bounding Circle
; ***

Macro BoundCircleColl(x1,y1,r1,x2,y2,r2)
( 0 Or (( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) - (r1 + r2) * (r1 + r2) ) < 0) )
EndMacro

Procedure P_BoundCircleColl(x1,y1,r1,x2,y2,r2)
  Coll = #False

  dist = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) - (r1 + r2) * (r1 + r2)
 
  If dist < 0
    Coll = #True
  EndIf

  ProcedureReturn Coll

EndProcedure

Ce sont des "macros" ou des procédures, à utiliser dans ton code.
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMar 8 Mar 2011 - 19:02

Bon j'ai encore un problème :
Code:
#fenetre=0
#LARGEUR_TILE=32
#HAUTEUR_TILE=32
#spr_zozor=0
#spr_bloc=0

Structure object
    x.l
    y.l
    w.l
    h.l
    sprite_index.l
    vsp.l
EndStructure

Structure bloc
  x.l
  y.l
  sprite_index.l
EndStructure

Global Dim TileIsMur.l(20,15)

Procedure place_free(x,y,w,h)
  i1 = x/#LARGEUR_TILE
  j1 = y/#HAUTEUR_TILE
  i2 = (x + w -1)/#LARGEUR_TILE
  j2 = (y + h -1)/#HAUTEUR_TILE
 
  For i=i1 To i2 Step 1
    For j=j1 To j2 Step 1
        If TileIsMur(i,j)
          ProcedureReturn #False;
        EndIf
     
        Next
  Next
   
      ProcedureReturn #True;
 EndProcedure
 
 
 
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

OpenScreen(#LARGEUR_TILE*20, #HAUTEUR_TILE*15, 16, "Sprite")
LoadSprite(#spr_zozor, "image/zozor.bmp", 0)
LoadSprite(#spr_bloc, "image/bloc.bmp", 0)

Dim bloc.bloc(20)
Dim obj_player.object(0)

For i=0 To 20 Step 1
  TileIsMur(i,14) = 1
  bloc(i)\y = 14*#LARGEUR_TILE
  bloc(i)\x = i*#HAUTEUR_TILE
  bloc(i)\sprite_index = #spr_bloc
Next

obj_player(0)\x = 320
obj_player(0)\y = 0
obj_player(0)\w = 84
obj_player(0)\h = 95
obj_player(0)\sprite_index = #spr_zozor
obj_player(0)\vsp = 5

Repeat
  FlipBuffers()
  ClearScreen(RGB(0,0,0))
  ExamineKeyboard()
 
  obj_player(0)\vsp=obj_player(0)\vsp+1
 
    For i=0 To vsp Step 1
      If place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1) And obj_player(0)\vsp> 0
        obj_player(0)\y=obj_player(0)\y+1
      ElseIf place_free(obj_player(0)\x,obj_player(0)\y-1,obj_player(0)\w,obj_player(0)\h) And obj_player(0)\vsp< 0
        obj_player(0)\y=obj_player(0)\y-1   
      Else
        obj_player(0)\vsp = 0
      EndIf
    Next
   
   
 
    If KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x-1,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)
      obj_player(0)\x=obj_player(0)\x-1
    ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h)
      obj_player(0)\x=obj_player(0)\x+1
    EndIf
   
    If KeyboardPushed(#PB_Key_Up)
      If check = 0 And Not place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)
        check = 1
        jump=25
      EndIf
      If jump > 0
        jump=jump-1
        obj_player(0)\vsp = -3
      EndIf
    EndIf
   
    If Not KeyboardPushed(#PB_Key_Up)
      jump = 0
      check = 0
    EndIf
   
 
    DisplaySprite(obj_player(0)\sprite_index,obj_player(0)\x,obj_player(0)\y)
   
    For i=0 To 20 Step 1
      DisplaySprite(bloc(i)\sprite_index,bloc(i)\x,bloc(i)\y)
    Next
 
  Until KeyboardPushed(#PB_Key_Escape)

Voilà enfaite les sprites sont identique alors qu'il ne devrait pas.
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMar 8 Mar 2011 - 21:01

jbg77 a écrit:
Voilà enfaite les sprites sont identique alors qu'il ne devrait pas.

salut

c'était tout simple :
change ça :
#spr_bloc=1

En fait, lorsque tu crées des sprites, tu leur donnes une sorte d'identifiant :

toi tu avais ça :

Code:

#spr_zozor=0
#spr_bloc=0

et ça :
Code:

LoadSprite(#spr_zozor, "zozor.bmp", 0)
LoadSprite(#spr_bloc, "bloc.bmp", 0)

pb remplace tes constante par leur valeur.
Ce qui donnait :
Code:

LoadSprite(0, "zozor.bmp", 0)
LoadSprite(0, "bloc.bmp", 0)

Donc, tu lui disais :
sur le sprite 0 : charge l'image zozor
puis sur le sprite 0 (donc , le même car le même numéro) : charge le sprite bloc

Pour éviter ça, je te conseille de faire une enumeration au début, sur les constantes de la même "famille" (sprite, écran, etc..)

comme ça :
Code:
Enumeration
#spr_zozor
#spr_bloc
EndEnumeration

Ainsi pb donnera lui-même les valeurs :
#spr_zozor =0
#spr_bloc =1

et voilà, c'est réparé Very Happy

Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMar 8 Mar 2011 - 21:38

Ah merci Smile , je vais relire le tuto sur le site du zero cela m'évitera ce genre d'erreur.
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMer 9 Mar 2011 - 17:28

Bon je me permet d'up car j'ai une question, j'ai mis setframerate(60) mais les fps ne sont toujours pas limiter, que faire ?
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMer 9 Mar 2011 - 20:39

jbg77 a écrit:
Bon je me permet d'up car j'ai une question, j'ai mis setframerate(60) mais les fps ne sont toujours pas limiter, que faire ?
pour ça, je crois que la technique est la suivante :

- au début de ton code , par exemple dans l'enumeration, ou avec les variables, tu définit une variable (mets le fps que tu veux)
Code:
#FPS_LIMIT = 120

- puis, dans ta boucle principale :
Code:
Repeat
    Event.l = WindowEvent()
        If (ElapsedMilliseconds() > CheckTime + 1000 / #FPS_LIMIT)
      CheckTime = ElapsedMilliseconds()
      FlipBuffers()
      ClearScreen(RGB(128,128,128))
     
;les evenements de ta boucle     
       
    Else
      Delay(5)
    EndIf
   
  Until Event = #PB_Event_CloseWindow

Normalement, ça devrait marcher
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMer 9 Mar 2011 - 20:58

La variable est obliger d'être une constante ?
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMer 9 Mar 2011 - 21:22

jbg77 a écrit:
La variable est obliger d'être une constante ?
je ne crois pas.

Il faut tester.

Mais étant donné que tu veux fixer un maximum, ça parait logique que ce soit une constante en fait Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMer 9 Mar 2011 - 21:32

Oui mais par exemple si je veux débloquer le nombre d'ips max.
Si va falloir que je regarde pour un système de collision au pixel près si je veux faire des pentes.
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyMer 9 Mar 2011 - 21:39

jbg77 a écrit:
Oui mais par exemple si je veux débloquer le nombre d'ips max.
Si va falloir que je regarde pour un système de collision au pixel près si je veux faire des pentes.
sinon, le plus simple est de tester Smile

Pour les collisions au pixel, il y a spritePixelCollision(), mais il faut ajouter directX7 dans l'option du compilateur (bibliothèque sous-système).

Sinon, il semblerait que ce soit mieux de le faire plus ou moins à la main, mais ça je ne sais pas comment on fait :p
Les collisions au pixel ne sont pas forcément très efficaces je trouve. En tout cas, pas tout le temps.
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyVen 11 Mar 2011 - 19:17

Finalement je pense que je peux juste utiliser les tableaux pour les collisions, par contre j'ai deux autres problèmes :
- Les bloc ne s'affichent pas tous
- Il y a un bug avec les pentes quand j'appuie sur gauche, sur droite tout marche correctement

Code:
#fenetre=0
#LARGEUR_TILE=32
#HAUTEUR_TILE=32
#RESOLUTION_W=1024
#RESOLUTION_H=768
#spr_zozor=0
#spr_bloc=1
#FPS_LIMIT = 60

Structure object
    x.l
    y.l
    w.l
    h.l
    sprite_index.l
    vsp.f
EndStructure

Structure bloc
  x.l
  y.l
  sprite_index.l
EndStructure

Global Dim TileIsMur.l(32, 24)

Procedure place_free(x,y,w,h)
  i1 = x/#LARGEUR_TILE
  j1 = y/#HAUTEUR_TILE
  i2 = (x + w -1)/#LARGEUR_TILE
  j2 = (y + h -1)/#HAUTEUR_TILE
 
  For i=i1 To i2 Step 1
    For j=j1 To j2 Step 1
        If TileIsMur(i,j)=1
          ProcedureReturn 0;
        EndIf
        If TileIsMur(i,j)=2
          ProcedureReturn 2;
        EndIf
        If TileIsMur(i,j)=3
          ProcedureReturn 3;
        EndIf
    Next
  Next
   
      ProcedureReturn 1;
 EndProcedure
 
 
 
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

OpenWindow(#fenetre,50,50,#RESOLUTION_W,#RESOLUTION_H,"bonjour")
OpenWindowedScreen(WindowID(#fenetre),0,0,#RESOLUTION_W,#RESOLUTION_H,0,0,0,0)
LoadSprite(#spr_zozor, "image/zozor.bmp", 0)
LoadSprite(#spr_bloc, "image/bloc.bmp", 0)

Dim bloc.bloc(33)
Dim obj_player.object(0)

For i=0 To 32 Step 1
  TileIsMur(i,(#RESOLUTION_H/32)-1) = 1
  bloc(i)\y = #RESOLUTION_H-32
  bloc(i)\x = i*#LARGEUR_TILE
  bloc(i)\sprite_index = #spr_bloc
Next

TileIsMur(10,(#RESOLUTION_H/32)-2)=2
TileIsMur(9,(#RESOLUTION_H/32)-2)=1
TileIsMur(8,(#RESOLUTION_H/32)-2)=3

obj_player(0)\x = 320
obj_player(0)\y = 0
obj_player(0)\w = 84
obj_player(0)\h = 95
obj_player(0)\sprite_index = #spr_zozor
obj_player(0)\vsp = 0.25


Repeat
  Event.l = WindowEvent()
  If (ElapsedMilliseconds() > CheckTime + 1000 / #FPS_LIMIT)
      CheckTime = ElapsedMilliseconds()
      FlipBuffers()
      ClearScreen(RGB(128,128,128))
      ExamineKeyboard()
     
     
        obj_player(0)\vsp+1
     
 
        For i=0 To Abs(obj_player(0)\vsp) Step 1
          If place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)=1 And obj_player(0)\vsp> 0
            obj_player(0)\y=obj_player(0)\y+1
          ElseIf place_free(obj_player(0)\x,obj_player(0)\y-1,obj_player(0)\w,obj_player(0)\h)=1 And obj_player(0)\vsp< 0
            obj_player(0)\y=obj_player(0)\y-1
          Else
            obj_player(0)\vsp = 0
          EndIf
        Next
   
   
        For i=0 To 5 Step 1
          If KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)=3
            obj_player(0)\x-1
            obj_player(0)\y+1
          ElseIf KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x-1,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=1
            obj_player(0)\x-1
          ElseIf KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x-1,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=2
            obj_player(0)\x-1
            obj_player(0)\y-1
           
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h+1)=2
            obj_player(0)\x+1
            obj_player(0)\y+1
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h)=1
            obj_player(0)\x+1
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h)=3
            obj_player(0)\x+1
            obj_player(0)\y-1
          EndIf
        Next
       
       
        If KeyboardPushed(#PB_Key_Up)
          If check = 0 And Not place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)=1
            check = 1
            jump=25
          EndIf
          If jump > 0
            jump=jump-1
            obj_player(0)\vsp = -3
          EndIf
      EndIf
     
     
        If Not KeyboardPushed(#PB_Key_Up)
          jump = 0
          check = 0
        EndIf
   
 
        DisplaySprite(obj_player(0)\sprite_index,obj_player(0)\x,obj_player(0)\y)
       
       
        For i=0 To 20 Step 1
          DisplaySprite(bloc(i)\sprite_index,bloc(i)\x,bloc(i)\y)
        Next
       
       
  Else
    Delay(5)
  EndIf
 
Until KeyboardPushed(#PB_Key_Escape)
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyVen 11 Mar 2011 - 22:29

salut

j'ai commencé à regarder.

déjà, je me permettrai de te faire une remarque générale :
- tu devrais mieux organiser ton code, ça te permettrait de mieux voir d'où viennent les bugs.

un exemple d'organisation :
Code:

***********enumeration*********************

***********variables************************

***********structure / tableaux****************

***********declare procedure*****************

***********initialisation / open window**********

*************boucle*************************

*********** procedures **********************

si besoin :

*********** data section *********************

Tu peux organiser un peu différemment, mais c'est globale l'idée et l'organisation qu'on conseille.
Ca t'évite d'avoir des tableaux, déclaration de tableaux, etc éparpillés partout Smile.

Pour ton problème, visiblement, le 2ème problème vient d'ici, mais je ne comprends pas trop ta méthode (bon, je n'ai pas regardé très longtemps non plus, à vrai dire :p) :

Code:

TileIsMur(10,(#RESOLUTION_H/32)-2)=2
TileIsMur(9,(#RESOLUTION_H/32)-2)=1
TileIsMur(8,(#RESOLUTION_H/32)-2)=3

Mais tu as aussi un soucis avec ta procédures place_free, car si tu vas tout à droite, il y a un plantage.
Si j'ai le temps, j'essaie de mieux regarder ce week end.

bonne continuation Wink.



Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyVen 11 Mar 2011 - 23:24

C'est vrai que pour l'organisation du code j'ai pas d'excuse surtout que ombre m'avait prévenu mais dés que j'aurais programmé l'éditeur de niveau, il n'y aura plus de tableau qui se balade partout.
Pour le moteur de plateforme c'est super simple j'utilise un tableau où les cases sont soit égale à 0 donc rien, soit 1 un bloc, 2 et 3 des pentes.Après tu arriveras à comprendre.
Pour la fonction procédure il faut que je regarde ça doit pas êtres trop compliqué.
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptySam 12 Mar 2011 - 9:10

jbg77 a écrit:
C'est vrai que pour l'organisation du code j'ai pas d'excuse surtout que ombre m'avait prévenu mais dés que j'aurais programmé l'éditeur de niveau, il n'y aura plus de tableau qui se balade partout.
et puis, en organisant, ça te permet de bien classer ton code, et d'y retrouver plus facilement : combien tu as de structures, de tableau, d'elements dans tes tableaux, etc..
ça aide pour corriger les bugs :.

Citation :
Pour le moteur de plateforme c'est super simple j'utilise un tableau où les cases sont soit égale à 0 donc rien, soit 1 un bloc, 2 et 3 des pentes.Après tu arriveras à comprendre.
oui, j'avais compris pour ça Wink.
Par contre, je n'ai pas encore compris pourquoi effectivement ça ne marche pas.

Citation :
Pour la fonction procédure il faut que je regarde ça doit pas êtres trop compliqué.
ok



Dernière édition par blendman le Sam 12 Mar 2011 - 11:50, édité 2 fois
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptySam 12 Mar 2011 - 11:33

Voilà j'ai régler le bug du tableau hors limites et celui de la pente, il me reste plus qu'a régler celui des bloc qui ne s'affiche pas.
Code:
Enumeration
#fenetre
#spr_zozor
#spr_bloc
EndEnumeration

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

#FPS_LIMIT=60
#LARGEUR_TILE=32
#HAUTEUR_TILE=32
#RESOLUTION_W=1024
#RESOLUTION_H=768
Global Dim TileIsMur.l(32, 24)

Structure object
    x.l
    y.l
    w.l
    h.l
    sprite_index.l
    vsp.f
EndStructure

Structure bloc
  x.l
  y.l
  sprite_index.l
EndStructure

Procedure place_free(x,y,w,h)
  i1 = x/#LARGEUR_TILE
  j1 = y/#HAUTEUR_TILE
  i2 = (x + w -1)/#LARGEUR_TILE
  j2 = (y + h -1)/#HAUTEUR_TILE
 
  For i=i1 To i2 Step 1
    For j=j1 To j2 Step 1
      If i >= 0 And j >=0 And i <= 31 And j <= 23
        If TileIsMur(i,j)=1
          ProcedureReturn 0;
        EndIf
        If TileIsMur(i,j)=2
          ProcedureReturn 2;
        EndIf
        If TileIsMur(i,j)=3
          ProcedureReturn 3;
        EndIf
      Else
        ProcedureReturn 0;
      EndIf
    Next
  Next
   
      ProcedureReturn 1;
 EndProcedure
 

Dim bloc.bloc(33)
Dim obj_player.object(0)


OpenWindow(#fenetre,50,50,#RESOLUTION_W,#RESOLUTION_H,"bonjour")
OpenWindowedScreen(WindowID(#fenetre),0,0,#RESOLUTION_W,#RESOLUTION_H,0,0,0,0)

LoadSprite(#spr_zozor, "image/zozor.bmp", 0)
LoadSprite(#spr_bloc, "image/bloc.bmp", 0)

For i=0 To 32 Step 1
  TileIsMur(i,(#RESOLUTION_H/32)-1) = 1
  bloc(i)\y = #RESOLUTION_H-32
  bloc(i)\x = i*#LARGEUR_TILE
  bloc(i)\sprite_index = #spr_bloc
Next

TileIsMur(10,(#RESOLUTION_H/32)-2)=2
TileIsMur(9,(#RESOLUTION_H/32)-2)=1
TileIsMur(8,(#RESOLUTION_H/32)-2)=3

obj_player(0)\x = 320
obj_player(0)\y = 0
obj_player(0)\w = 84
obj_player(0)\h = 95
obj_player(0)\sprite_index = #spr_zozor
obj_player(0)\vsp = 0.25


Repeat
  Event.l = WindowEvent()
  If (ElapsedMilliseconds() > CheckTime + 1000 / #FPS_LIMIT)
      CheckTime = ElapsedMilliseconds()
      FlipBuffers()
      ClearScreen(RGB(128,128,128))
      ExamineKeyboard()
     
     
        obj_player(0)\vsp+1
     
 
        For i=0 To Abs(obj_player(0)\vsp) Step 1
          If place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)=1 And obj_player(0)\vsp> 0
            obj_player(0)\y=obj_player(0)\y+1
          ElseIf place_free(obj_player(0)\x,obj_player(0)\y-1,obj_player(0)\w,obj_player(0)\h)=1 And obj_player(0)\vsp< 0
            obj_player(0)\y=obj_player(0)\y-1
          Else
            obj_player(0)\vsp = 0
          EndIf
        Next
   
   
        For i=0 To 5 Step 1
          If KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x+83,obj_player(0)\y,obj_player(0)\w-1,obj_player(0)\h+1)=3
            obj_player(0)\x-1
            obj_player(0)\y+1
          ElseIf KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x-1,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=1
            obj_player(0)\x-1
          ElseIf KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x-1,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=2
            obj_player(0)\x-1
            obj_player(0)\y-1
           
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h+1)=2
            obj_player(0)\x+1
            obj_player(0)\y+1
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h)=1
            obj_player(0)\x+1
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h)=3
            obj_player(0)\x+1
            obj_player(0)\y-1
          EndIf
        Next
       
       
        If KeyboardPushed(#PB_Key_Up)
          If check = 0 And Not place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)=1
            check = 1
            jump=25
          EndIf
          If jump > 0
            jump=jump-1
            obj_player(0)\vsp = -3
          EndIf
      EndIf
     
     
        If Not KeyboardPushed(#PB_Key_Up)
          jump = 0
          check = 0
        EndIf
   
        If place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=1
          y-1
        EndIf
       
        DisplaySprite(obj_player(0)\sprite_index,obj_player(0)\x,obj_player(0)\y)
       
       
        For i=0 To 20 Step 1
          DisplaySprite(bloc(i)\sprite_index,bloc(i)\x,bloc(i)\y)
        Next
       
       
       
  Else
    Delay(5)
  EndIf
 
Until KeyboardPushed(#PB_Key_Escape)

Bon faudrait que je range le code aussi, tu connais des tutos sur la lecture de fichier ?
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptySam 12 Mar 2011 - 11:50

concernant le scrolling, voici une méthode proposée par comtois, un developpeur de développez.com, qui m'a fait un superbe exemple Smile :

- tu crées une structures "s_camera" (ou view) et une autre structure "s_carte" (ou room) (les noms, tu mets ce que tu veux Wink)
- personnellement, j'ai créé d'autres structures : s_Background, s_Objet
- tu ajoutes dans ta structure s_carte les tableaux des elements présents sur ta room (logique)

Ça peut ressembler à ça :

Code:

Structure s_Carte
  Largeur.l
  Hauteur.l 
  NbObjet.l
  Array Background.s_Background(0)
  Array Objet.s_Objet(0) 
EndStructure

Tu peux créer une structure vector, pour la positionX et Y, ça peut aider Wink.

Code:
structure vector
x.f
y.f
endstructure

ensuite ta structure s_camera :

Code:
Structure s_Camera ; la view
  Position.vector
  Largeur.i
  Hauteur.i
  ViewPort.vector
EndStructure

J'ai une structure Sprite que j'utilise pour mon personnage :

Code:

Structure s_Sprite Extends s_Objet
  Vitesse.i
EndStructure


j'initialise mon personnage comme ça :

Code:
Procedure InitPerso(*Carte.s_Carte, *Perso.s_Sprite)
  With *Perso
    \Id = #perso
    \Largeur = SpriteWidth(\Id)
    \Hauteur = SpriteHeight(\Id)
    \PointChaud\x = \Largeur/2
    \PointChaud\y = 80
    \Position\x = Random(*Carte\Largeur) -\PointChaud\x
    \Position\y = Random(*Carte\Hauteur) -\PointChaud\y
  EndWith
EndProcedure



Ensuite, tu crées un objet qui le centre de ta camera
et tu centre la caméra (ou view) en fonction de ce personnage :

Et pour l'update :
Code:

Procedure evenement(*Carte.s_Carte, *Camera.s_Camera, *Sprite.s_Sprite, *Quit.Integer)
  If ExamineKeyboard()
   
    If KeyboardPushed(#PB_Key_Up) And *Sprite\Position\y > 0
      *Sprite\Position\y - *Sprite\Vitesse
    EndIf
   
   
    If KeyboardPushed(#PB_Key_Down)
      *Sprite\Position\y + *Sprite\Vitesse
    EndIf
   
   
    If KeyboardPushed(#PB_Key_Left) And *Sprite\Position\x > 0
      *Sprite\Position\x - *Sprite\Vitesse
    EndIf
   
   
    If KeyboardPushed(#PB_Key_Right)
      *Sprite\Position\x + *Sprite\Vitesse
    EndIf

    If KeyboardPushed(#PB_Key_Escape)
      *quit\i = 1
    EndIf
   
    ;Centre la caméra sur le perso
    *Camera\Position\x = *Sprite\Position\x - *Camera\Largeur / 2
    *Camera\Position\y = *Sprite\Position\y - *Camera\Hauteur / 2

EndProcedure

Tu dois initialiser ta carte (ou room) :
Code:
Procedure InitCarte(*Carte.s_Carte)
  Define i.i
 
  *carte\NbSol = 200
 
  ReDim *Carte\Sol(*Carte\NbSol)
 
  *Carte\Largeur = 4000
  *Carte\Hauteur = 3000
 
  For i=0 To *Carte\NbSol
    With *Carte\Sol(i)
      \Id= 50 + Random(5)
      \Largeur = SpriteWidth(\Id)
      \Hauteur = SpriteHeight(\Id)
      \Position\x = Random(*Carte\Largeur)
      \Position\y = Random(*Carte\Hauteur)
    EndWith
 Next i
EndProcedure
 


Et pour l'affichage, par exemple :

Code:

for i =0 to nbSol
DisplaySprite3D(*Carte\Sol(i)\Id, *Camera\ViewPort\x + *Carte\Sol(i)\Position\x - *Camera\Position\x, *Camera\ViewPort\y + *Carte\Sol(i)\Position\y - *Camera\Position\y)
next i
 

voilà, normalement, ça devrait marcher.

l'exemple complet (de comtois) :
ftp://ftp-developpez.com/comtois/fichiers/ARKS/DVP_ARKS2.zip

inclus :
- depth
- scrolling
- load/save map
- menu (simple - touche F1 ou F2 je ne sais plus)



Citation :
tu connais des tutos sur la lecture de fichier ?
C'est à dire ? ouvrir un fichier map par exemple ?
Si oui, c'est normalement dan sle lien que je t'ai donné juste au dessus


Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptySam 12 Mar 2011 - 14:10

Je veux juste charger un fichier .txt et pour la view pour le moment j'ai pas de carte mais si j'ai bien compris, il suffit juste de déplacer la carte ?

Edit : Un dernier problème
Code:
Enumeration
#fenetre
#spr_zozor
#spr_bloc
#spr_penteG
#spr_penteD
EndEnumeration
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

UsePNGImageDecoder()

#fenetre=0
#FPS_LIMIT=60
#LARGEUR_TILE=32
#HAUTEUR_TILE=32
#RESOLUTION_W=1024
#RESOLUTION_H=768
Global Dim TileIsMur.l(32, 24)
For i=0 To 32 Step 1
  TileIsMur(i,(#RESOLUTION_H/32)-1) = 1
Next
TileIsMur(10,(#RESOLUTION_H/32)-2)=2
TileIsMur(9,(#RESOLUTION_H/32)-2)=1
TileIsMur(8,(#RESOLUTION_H/32)-2)=3

Structure object
    x.l
    y.l
    w.l
    h.l
    sprite_index.l
    vsp.f
EndStructure

Structure s_solid
  x.l
  y.l
  sprite_index.l
EndStructure



Procedure place_free(x,y,w,h)
  i1 = x/#LARGEUR_TILE
  j1 = y/#HAUTEUR_TILE
  i2 = (x + w -1)/#LARGEUR_TILE
  j2 = (y + h -1)/#HAUTEUR_TILE
 
  For i=i1 To i2 Step 1
    For j=j1 To j2 Step 1
      If i >= 0 And j >=0 And i <= 31 And j <= 23
        If TileIsMur(i,j)=1
          ProcedureReturn 0;
        EndIf
        If TileIsMur(i,j)=2
          ProcedureReturn 2;
        EndIf
        If TileIsMur(i,j)=3
          ProcedureReturn 3;
        EndIf
      Else
        ProcedureReturn 0;
      EndIf
    Next
  Next
   
      ProcedureReturn 1;
 EndProcedure
 
Procedure draw_level()
  nb_bloc=0
  For j=0 To 24 Step 1
    For i=0 To 32 Step 1
      If TileIsMur(i,j)=1
        nb_bloc+1
        ElseIf TileIsMur(i,j)=2
        nb_bloc+1
        ElseIf TileIsMur(i,j)=3
        nb_bloc+1
      EndIf
    Next
  Next
  Dim bloc.s_solid(80)
  For k=0 To nb_bloc Step 1
  For j=0 To 24 Step 1
    For i=0 To 32 Step 1
      If TileIsMur(i,j)=2
        bloc(nb_bloc)\x = i*32
        bloc(nb_bloc)\y = j*32
        bloc(nb_bloc)\sprite_index = #spr_bloc
        ElseIf TileIsMur(i,j)=2
        bloc(nb_bloc)\x = i*32
        bloc(nb_bloc)\y = j*32
        bloc(nb_bloc)\sprite_index = #spr_penteG
        ElseIf TileIsMur(i,j)=3
        bloc(nb_bloc)\x = i*32
        bloc(nb_bloc)\y = j*32
        bloc(nb_bloc)\sprite_index = #spr_penteD
      EndIf
    Next
  Next
  Next
  For i=0 To 80 Step 1
          DisplaySprite(bloc(i)\sprite_index,bloc(i)\x,bloc(i)\y)
  Next
   
 EndProcedure

OpenWindow(#fenetre,50,50,#RESOLUTION_W,#RESOLUTION_H,"bonjour")
OpenWindowedScreen(WindowID(#fenetre),0,0,#RESOLUTION_W,#RESOLUTION_H,0,0,0,0)

LoadSprite(#spr_zozor, "image/zozor.bmp", 0)
LoadSprite(#spr_bloc, "image/bloc.bmp", 0)
LoadSprite(#spr_penteG, "image/penteD.png", 0)
LoadSprite(#spr_penteD, "image/penteG.png", 0)

Dim obj_player.object(0)

obj_player(0)\x = 320
obj_player(0)\y = 0
obj_player(0)\w = 84
obj_player(0)\h = 95
obj_player(0)\sprite_index = #spr_zozor
obj_player(0)\vsp = 0.25

Repeat
  Event.l = WindowEvent()
  If (ElapsedMilliseconds() > CheckTime + 1000 / #FPS_LIMIT)
      CheckTime = ElapsedMilliseconds()
      FlipBuffers()
      ClearScreen(RGB(128,128,128))
      ExamineKeyboard()
     
     
        obj_player(0)\vsp+1
     
 
        For i=0 To Abs(obj_player(0)\vsp) Step 1
          If place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)=1 And obj_player(0)\vsp> 0
            obj_player(0)\y=obj_player(0)\y+1
          ElseIf place_free(obj_player(0)\x,obj_player(0)\y-1,obj_player(0)\w,obj_player(0)\h)=1 And obj_player(0)\vsp< 0
            obj_player(0)\y=obj_player(0)\y-1
          Else
            obj_player(0)\vsp = 0
          EndIf
        Next
   
   
        For i=0 To 5 Step 1
          If KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x+83,obj_player(0)\y,obj_player(0)\w-1,obj_player(0)\h+1)=3
            obj_player(0)\x-1
            obj_player(0)\y+1
          ElseIf KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x-1,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=1
            obj_player(0)\x-1
          ElseIf KeyboardPushed(#PB_Key_Left) And place_free(obj_player(0)\x-1,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=2
            obj_player(0)\x-1
            obj_player(0)\y-1
           
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h+1)=2
            obj_player(0)\x+1
            obj_player(0)\y+1
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h)=1
            obj_player(0)\x+1
          ElseIf KeyboardPushed(#PB_Key_Right) And place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w+1,obj_player(0)\h)=3
            obj_player(0)\x+1
            obj_player(0)\y-1
          EndIf
        Next
       
       
        If KeyboardPushed(#PB_Key_Up)
          If check = 0 And Not place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h+1)=1
            check = 1
            jump=25
          EndIf
          If jump > 0
            jump=jump-1
            obj_player(0)\vsp = -3
          EndIf
      EndIf
     
     
        If Not KeyboardPushed(#PB_Key_Up)
          jump = 0
          check = 0
        EndIf
   
        If place_free(obj_player(0)\x,obj_player(0)\y,obj_player(0)\w,obj_player(0)\h)=1
          y-1
        EndIf
       
        DisplaySprite(obj_player(0)\sprite_index,obj_player(0)\x,obj_player(0)\y)
        draw_level()
       
             
  Else
    Delay(5)
  EndIf
 
Until KeyboardPushed(#PB_Key_Escape)

Voilà la fonction draw_level ne marche pas que faire ?
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyDim 13 Mar 2011 - 17:16

jbg77 a écrit:
Je veux juste charger un fichier .txt
il y a quoi dans ton fichier texte ?
sinon, tu peux charger un fichier type ini : OpenPreferences(NomFichier$)

sinon, regarde du coté de :
openfile, readfile

Citation :
et pour la view pour le moment j'ai pas de carte mais si j'ai bien compris, il suffit juste de déplacer la carte ?
oui, et de lier la caméra au personnage qui lui est fixe

Citation :
Edit : Un dernier problème
Voilà la fonction draw_level ne marche pas que faire ?
il manque deux images pour que je puisse tester les 2 dernières Wink.
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyDim 13 Mar 2011 - 17:36

Voici mon fichier txt
Code:
640
480
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
20000000000000000000
12000000000000000003
11200000000000000031
11111111111111111111
Donc c'est le niveau.
Voici les images Lien
Merci pour ton aide !
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyDim 20 Mar 2011 - 11:30

Alors tu as pu testé ?
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyLun 21 Mar 2011 - 9:13

jbg77 a écrit:
Alors tu as pu testé ?
salut

je comprends ton fichier et ce que c'est sensé faire. Par contre, je n'ai pas encore travaillé sur ce genre de choses, donc je ne pourrais pas trop t'aider à ce niveau-là.

Mais dès que j'aurai regardé comment on enregistre et on load un fichier texte (pour une map), j'essaierai de t'aider Wink.
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide EmptyLun 21 Mar 2011 - 21:25

Nan j'arriverais à trouver tout seul pour les fichier c'est surtout pour l'erreur plus haut que je up le topic.
Revenir en haut Aller en bas
Contenu sponsorisé





[PureBasic]Topic Aide Empty
MessageSujet: Re: [PureBasic]Topic Aide   [PureBasic]Topic Aide Empty

Revenir en haut Aller en bas
 
[PureBasic]Topic Aide
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» le topic de mon jeu de pêche (j'ai vraiment besoin d'aide!)
» [Purebasic] Présentation et tutoriaux
» [purebasic]Tutoriel - Fx et blendmode
» dll en PureBasic
» [PureBasic] Momoplayer

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Programmation-
Sauter vers: