CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Collisions et pré-chargement en DB

Makineros63
Makineros63
Niveau 7
03 janvier 2004 à 23:12:54

Voilà, je voudrais savoir comment faire ( car je sais que c´ est possible) de faire un chargement en attendant, car la, avant de voir la scène 3D, on attends bien 15 secondes avec un joli écran tout blanc. Mais je ne sais pas comment faire.
Deuxièmement, les collisions avec les arbres. Je veux faire ces collisions par calcul mathématique et non en utilisant la fonction SET COLLISION ON. Je voulais faire les collisions avec la commande sqrt qui renvoie la distance entre deux objets, et quand cette dernière approche de 0, on bloque le mouvement de la shpère. Je pensais à celà, mais ça ne marche pas:

-------------------------------------------------

IF Sqrt((aX#-X#)^2)+(aY#-Y#)^2+(aZ#-Z#)^2) < 10
X# = aX#
Y# = aY#
Z# = aZ#
ENDIF

-------------------------------------------------

Et je vous laisse le code source, pour pouvoir le modifier afin que les éléments qui font attendre au démarrage soit chargé en voyant un écran de chargement pour ne pas attendre.

-------------------------------------------------

`Active le rafraichissement et défini la résoultion
SYNC ON : SYNC RATE 30
SET DISPLAY MODE 1024,768,32
HIDE MOUSE

`Chargement des médias qui serviront de textures pour les objets ( non vu dans le tutorial mais simple)
LOAD IMAGE " texture_objet.bmp",1
LOAD IMAGE " texture_matrice.bmp",2

`Création de la sphère
Make object sphere 1,25
Position object 1,500,0,1000
Texture object 1,1

`Fabrication de la Matrice
Make matrix 1,10000.0,10000.0,50,50
Randomize matrix 1,90.0
prepare matrix texture 1,2,2,2

`Positionne les objets aléatoirement sur la matrice
FOR arbres = 2 TO 500
`Chargement du modèle
LOAD OBJECT " arbre.x",arbres
position_x = RND(10000) : position_z = RND(10000)
`Positionne les objets
Position object arbres,position_x,GET GROUND HEIGHT(1,position_x,position_z),position_z : Scale object arbres,5000,5000,5000
`Initialise les variables concernant la position ( aléatoire) des arbres
aX# = Object position X(arbres)
aZ# = Object position Z(arbres)
aY# = Get ground height(1,aX#,aZ#)
NEXT arbres

`Definition de l´environnement
SET CAMERA RANGE 1,5000
`Active le brouillard puis défini la distance d´affichage et enfin sa couleur
FOG ON : Fog distance 4000 : Fog color RGB(128,128,128)
`Défini la couleur de l´arrière plan
Color backdrop RGB(128,128,128)

`Début de la boucle principale
DO

`Un petit ajout, le scrolling de la texture de la sphère, si vous ne comprenez pas, laissez un message sur le forum ; )
Scroll object texture 1,0,0.010

`Initialise les variables concernant la sphère
aY# = Object angle Y(1)

`Test si on appuie à gauche et fait tourner la sphère en concéquence
IF rightkey()
YROTATE OBJECT 1,WRAPVALUE(aY#+5.0)
ENDIF

`Test si on appuie à droite et fait tourner la sphère en conséquence
IF leftkey()
YROTATE OBJECT 1,WRAPVALUE(aY#-5.0)
ENDIF

`Test si on appuie sur la touche haut, et fait bouger la sphère uniquement si elle se trouve sur la matrice
IF upkey()
XTest# = NEWXVALUE(X#,aY#,20) : ZTest# = NEWZVALUE(Z#,aY#,20)
IF XTest# > 0 and XTest# < 10000 and ZTest# > 0 and ZTest# < 10000
Move Object 1,10
ENDIF
ENDIF

`Initialise les variables concernant la position de la sphère
X# = Object position X(1)
Z# = Object position Z(1)
Y# = Get ground height(1,X#,Z#)

`Positionne la sphère
Position object 1,X#,Y#+12.5,Z#

`Initialise les variables concernant la caméra
caX# = Camera angle X()
caZ# = Camera angle Z()

`Renvoie les nouvelles valeurs de caX# et caZ# pour positionner la caméra
caX# = NEWXVALUE(X#,aY#-180,100)
caZ# = NEWZVALUE(Z#,aY#-180,100)

`Positionne la caméra
Position camera caX#,Y#+50,caZ#
Point camera X#,Y#+25,Z#

`Fin de la boucle principale
SYNC : LOOP

-------------------------------------------------

J´ espère que vous m´avez compris et que vous pourrez m´aider, même si vous me proposer des réponses dans un autre langage c´ est aps grave, ça servira toujours :)

JeanYvesYves
JeanYvesYves
Niveau 10
03 janvier 2004 à 23:39:40

Bon, déja tu as oublié de préciser que tu parles de Basic. Mais bon, j´ai pu reconnaitre le langage ( par ces # affreux apres les noms de variable...)

Bon, j´ai pas lu ton code source, mais j´ai une remarque :

déja, ton approche par distance entre 2 centres de spheres est la meilleure si tu consideres les centres.
Mais évite le SQRT : sache que si tu consideres la distance au carré, ça ira plus vite :

au lieu de faire :

sqrt(...) < 10
tu fais
( ...) < 10^2

--> gain de temps considérable

Apres, comprends pas ce que tu veux dire par arbre dans ce cas . .. Octree ?

Makineros63
Makineros63
Niveau 7
04 janvier 2004 à 00:24:20

Oui j´ai oublié de dire que c´ étais du Darkbasic, mais je suis tellement ahbitué à écrire DB que j´ ai rien dis. J´ essaierai d´y pensais la prochaine fois. :)

Donc, après si la distance entre la sphère et un des arbres et inférieur à 10, je veux que la sphère n´ avance plus. Comme si elle entrait en collision avec l´ arbre. Que l´ arbre constitue un obstacle à la sphère.

Merci JY² tu m´aides beaucoup ! :-)

Makineros63
Makineros63
Niveau 7
04 janvier 2004 à 15:09:34

:up:

JeanYvesYves
JeanYvesYves
Niveau 10
04 janvier 2004 à 19:51:58

ben le bon truc : quand tu faits un mouvement, plutot que de faire le mouvement, puis tester si tu touches, tu gardes ta position en mémoire, tu fais ton mouvement, et si tu touches, tu rétablis la position en mémoire : comme ça, ça ne bouge pas.
Le bon plan est de poser le perso a pile 10 de distance : pour cela, utilise la géométrie vectorielle a la rigueur.

Bref, tu vois : tu testes en gros si le mouvement est faisable, s´il ne l´est pas, tu ne bouges pas.

Précise moi si tu veux en savoir +

Makineros63
Makineros63
Niveau 7
04 janvier 2004 à 21:10:43

Je vais essayer de modifer le code avec tes conseils. Mais la géométrie vectorielle me dis pas grand chose. Sinon c´ est clair, avec sqrt le programme rame ! Les animations sont saccadées.

Donc, d´ abord je mémorise la position de la sphère puis ensuite je fais le mouvement là c´ est bon je te suis et après je test si on entre en contact avec un objet et la je capte plus alors que c´ est logique.

JeanYvesYves
JeanYvesYves
Niveau 10
05 janvier 2004 à 20:07:29

faudra peut etre en parler en direct si tu veux + de détails :) tu as mon MSN :)

Makineros63
Makineros63
Niveau 7
05 janvier 2004 à 22:33:49

Voui ok :) Je viens de me rendre compte que la formule qui s´ utilise dans sqrt c´ est la même que celle pour calculer la distance entre deux points dans un repère dans l´ espace :lol:
Il était temps, comme quoi les math ça sert ! :)

Makineros63
Makineros63
Niveau 7
06 janvier 2004 à 07:11:36

Je viens de voir une erreur, la variable aY# sert à poisiotnné les arbres en hauteur mais aussi renvoie l´angle de rotation. Ca pouvais pas marcher, j´ai modifier tout ça et les collisions marchaient. Mais, le pb et que ça calculé les distances pour tous les arbres donc ça ramé plus que ramé :lol:

Makineros63
Makineros63
Niveau 7
09 janvier 2004 à 20:02:14

JY² je te vois pas bcp sur msn :)
Sinon pour en revenir au pb de collision.

Comme je l´ ai dis plus haut, j´ utilisais deux fois la même variable pour faire deux choses différentes, j´ ai donc modifier tout cas. Et j´ ai essayer de gérer les collisions en passant par une fonction ( ça par contre ça me rapelle une des premières convertations avec JY² quand on parlé des fonctions :lol: )

J´ ai donc d´ abord modifié la boucle FOR NEXT qui plaçe les arbres, le nouveau code est donc:

`Positionne les objets aléatoirement sur la matrice
FOR arbres = 2 TO 4
FOR position_x = 10 TO 9990
FOR position_z = 10 TO 9990
`Chargement du modèle
LOAD OBJECT " arbre.x",arbres
`Positionne les objets
Position object arbres,position_x,GET GROUND HEIGHT(1,position_x,position_z),position_z : Scale object arbres,20000,20000,20000
NEXT position_z
NEXT position_x
NEXT arbres

Et après la boucle principale j´ ai fait la fonction pour gérer les collisions

FUNCTION Collide(X#,Y#,Z#)
FOR pos_x = 10 TO 9990
FOR pos_z = 10 TO 9990
IF X# > pox_x-30
IF X# < pos_x+30
IF Z# > pos_z-30
IF Z# < pos_z+30
IF Y# < GET GROUND HEIGHT(1,pos_x,pos_y)
Collide = 1
EXITFUNCTION Collide
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
NEXT pos_z
NEXT pos_x
Collide = 0
ENDFUNCTION Collide

Puis dans la boucle j´ ai fait un test pour vérifier si Collide = 1 alors on remets la shpère à ces anciennes coordonnées.
Voici le code qui est dans la boucle principale:

`Test si Collide = 1 ou non
IF Collide = 1
X# = oldX#
Y# = oldY#
Z# = oldZ#
ENDIF

Voilà, donc c´ est bon il n´ y a aucun problème à la compilation, mais à l´ éxécution :/
Je reste sur un écran blanc, alors est ce que ça vient de la fonction ? ou si vous savez d´ ou ça peu venir ? N´ hesitez pas, y´ a que JY² qui me réponds alors que c´ est pas une question du genre comment on fait pour faire un jeu en téléchargant c++...

pierreonxbox
pierreonxbox
Niveau 10
09 janvier 2004 à 20:06:43

j voudrais bien t aider mais niveau math je suis naze alors . .. dsl

Makineros63
Makineros63
Niveau 7
09 janvier 2004 à 21:25:53

Pas grave :)
Mais on en voit des gars sur le forum qui disent savoir programmer mais qui dès qu´ on met un peu de code lache tout, alors que du DarkBasic, c´ est largement plus simple que le c++

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment