Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Perdu dans l'espace | |
|
+4Jean Claude JL35 papydall treehouse 8 participants | Auteur | Message |
---|
treehouse
Nombre de messages : 28 Localisation : UK Date d'inscription : 21/10/2013
| Sujet: Perdu dans l'espace Mer 6 Nov 2013 - 21:37 | |
| Bonjour, voici mon jeu d'aventure de l'espace 3D ! C'est un long post et une assez longue programme. Je n'ai pas traduit les commentaires de code. La scène est basé sur le jeu "Elite" pour la BBC Micro (et d'autres machines). Dans l'original, on ne peut que tourner votre vaisseau de haut en bas et autour de l'axe de déplacement (qui a fait pour certaines manœuvres intéressantes), mais j'ai ajouté un contrôle de tourner à gauche et à droite. Bien sûr, vous pouvez changer le scancode en fonction de vos préférences. Haut, bas, gauche et droite, par la position du curseur de la souris. Les touches fléchées permettent un contrôle supplémentaire pour haut et bas, et tourner autour de l'axe de déplacement. La touche shift gauche est l'accélérateur, touche de commande gauche est le frein ou la direction inverse. En outre, les touches Q, A et Z choisissent haute, moyenne et faible accélération. Pour arrêter complètement, appuyez sur ESPACE. ship% est l'indice de notre objet de vaisseau, qui est un rectangle plat. Ceci est nécessaire pour vérifier les collisions. La station spatiale tourne continuellement, afin d'accoster avec lui, vous devez aligner votre vaisseau et tourner avec soin pour correspondre à sa rotation. Il ya aussi un autre vaisseau, une soucoupe volante extraterrestre. Pour l'instant, au début, la station spatiale est «en orbite» autour de la planète d'origine (le seul avec l'atmosphère), et nous sommes quelque part près de la station spatiale, afin que nous puissions avoir à tourner à voir. Dans le même temps, l'extraterrestre commence déplacement de la station vers nous. Je travaillerai prochaine sur les mathématiques pour contrôler le(s) extraterrestre(s). Cela peut être "pas cher" et approximative, et je pense que j'ai une bonne idée de comment faire cela. Cependant, j'ai un problème. Contrôler notre vaisseau doit être plus précise et la caméra doit se déplacer avec l'objet exactement. Quand j'ai appris cam_move, cam_turn, cam_roll, etc, je pensais que cela pourrait fonctionner, mais il se pose une divergence entre la position de l'objet et de la caméra au fil du temps. Voler autour pendant un moment et vous verrez la boîte rectangulaire à l'extérieur. Il est possible de placer la caméra à plusieurs reprises à la position de l'objet avec cam_x_position etc, mais je ne peux pas le faire pointer dans la bonne direction (le long de l'axe Z local). Ce serait merveilleux si l'on pouvait écrire "cam_z_point N" pour aligner la caméra avec l'axe Z de l'objet N, ou s'il y avait une autre façon de maintenir l'alignement exact de la position et l'orientation de la caméra avec un objet choisi. Une autre idée serait d'abandonner l'aide d'un objet pour le vaisseau, et calculer les collisions mathématiquement, mais cam_move etc ne pas maintenir la position absolue. Je tiens aussi à garder des positions absolues des objets dans le système de coordonnées de la scene3D pour d'autres calculs - gamme et la portée des objets, etc. La seule solution que je vois va impliquer mathématiques complexes. Rotations 3D ne sont pas commutative, il est donc difficile de maintenir la connaissance des coordonnées des objets. Toute aide serait génial. Merci, Treehouse - Code:
-
' Elite - based on the '80s BBC Micro game
label action,fin,noseup,nosedown,rollleft,rollright,accel,decel
' number of planets Dim N%: N%=8 dim j%,ship%,sol%,halo1%,halo2%,s,m,n,o ' angles a,b, t=pitch step & u=roll step (mt & ut for mouse) dim a,b,t,u,mt,mu ' Space station object indices & variables dim stn%,shome,stnrot,stnspk1%,stnspk2%,stnring%,stnhub%,stndoor%,hubhit%,doorhit% ' Alien indices & vars dim aliendisc%,alienbridge%,ala,alaxis ' constants dim pi : pi=3.14159264 ' Arrays for planets' positions x,y,z, orbital radius r dim x(N%+2),y(N%+2),z(N%+2),r(N%+2) ' Ship's variables: position,speed,speed increment,rotations dim sx,sy,sz,sp,boost,xrot,yrot,zrot
sp=0:boost=0.001:stnrot=0:xrot=0:yrot=0:zrot=0 doorhit%=0:hubhit%=0 : ' docking/crash detection t=0.5 : ' pitch increment u=1 : ' roll increment
full_space 0 ' height 0,570 ' width 0,870
scene3d 1:full_space 1 cursor_cross 1 ' Sun is light source, at origin, therefore, light_position 0,0,0 ' It's in space! color 1,0,0,0
3d_skybox 2 ' 3d_load_texture_bottom 2,"Bitmaps\stars.bmp" ' 3d_load_texture_top 2,"Bitmaps\stars.bmp" ' 3d_load_texture_left 2,"Bitmaps\stars.bmp" ' 3d_load_texture_right 2,"Bitmaps\stars.bmp" ' 3d_load_texture_front 2,"Bitmaps\stars.bmp" ' 3d_load_texture_back 2,"Bitmaps\stars.bmp"
' Planets created first to keep array index (j%) low without offset. Further object indices will be relative to end of array. for j%=3 to N%+2 : ' 3 because of frame(0), scene3d(1), skybox(2); N%+2 as arrays start at zero. a = rnd(pi*1000)/500 : ' Full circle in radians r(j%)=rnd(100000)+5000 : ' solar systems are BIG! x(j%)=r(j%)*cos(a) : ' Circular coordinate y(j%)=(rnd(2000)-1000)/20 : ' A random offset from plane z(j%)=r(j%)*sin(a) : ' Circular coordinate s = power(r(j%),1.3)/10000 : ' size of planet caption 0,s : ' just to check 3d_sphere j%,s 3d_position j%,x(j%),y(j%),z(j%) 3d_color j%,rnd(40),rnd(40),rnd(40) ' special home planet first: if j%=3 ' 3d_load_texture j%,"Bitmaps\planet.bmp" shome=s*2 : ' radius of station rel. to size of planet (smaller=easier to find) 3d_sphere j%+100,s*1.03 : ' safe index offset for (& may have others with) atmosphere 3d_position j%+100,x(j%),y(j%),z(j%) 3d_color j%+100,20,20,155 3d_transparent j%+100,180 end_if next j%
' Sun sol%=j%+1 3d_sphere sol%,800 3d_color sol%,255,245,50
halo1%=sol%+1 3d_sphere halo1%,900 3d_color halo1%,255,210,140 3d_transparent halo1%,190
halo2%=sol%+2 3d_sphere halo2%,1500 3d_color halo2%,255,55,140 3d_transparent halo2%,240
' Initialise spaceship coordinates near space station (for now) sx=x(3)+shome+rnd(100)-50:sy=y(3)+shome+rnd(100)-50:sz=z(3)+shome+rnd(100)-50
ship%=sol%+3 : ' required for collision detection 3d_box ship%,0.8,0.2,0.8 : ' wide,thick,long 3d_position ship%,sx,sy,sz ' Pointing box at 0,0,0 (object sol%) so that camera is lined up with its Z. 3d_point_object ship%,sol% ' 3d_load_texture ship%,"Bitmaps\flare.bmp" 3d_color ship%,255,0,0
' Several concentric parts of the station follow: stn%=sol%+4 3d_dodecahedron stn% 3d_scale stn%,3,3,3 ' 3d_color stn%,55,55,40 3d_position stn%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stn%,3
' Spokes stnspk1%=sol%+5 3d_box stnspk1%,0.8,20,0.1 ' 3d_color stnspk1%,255,255,240 ' 3d_color stnspk1%,100,100,50 ' 3d_load_texture stnspk1%,"Bitmaps\mcheck4.bmp" 3d_position stnspk1%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnspk1%,3
stnspk2%=sol%+6 3d_box stnspk2%,20,0.8,0.1 ' 3d_color stnspk1%,255,255,240 ' 3d_color stnspk2%,100,100,50 ' 3d_load_texture stnspk1%,"Bitmaps\mcheck4.bmp" 3d_position stnspk2%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnspk2%,3
' Ring stnring%=sol%+7 3d_torus stnring%,10,0.5 3d_position stnring%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnring%,3
' Cylinder hub stnhub%=sol%+8 3d_cylinder stnhub%,3,1.3,1.3 3d_position stnhub%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnhub%,3 3d_x_rotate stnhub%,90
' Box to give illusion of door (bug?: color 0,0,0 does not cover all sides) stndoor%=sol%+9 3d_box stndoor%,0.3,1.3,3.01 : ' height,width,>cylinderlength 3d_position stndoor%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stndoor%,3 3d_color stndoor%,100,100,1 3d_transparent stndoor%,80
' Alien flying saucer aliendisc%=sol%+10 alienbridge%=sol%+11 3d_sphere aliendisc%,1 3d_sphere alienbridge%,0.25 3d_y_scale aliendisc%,0.06 3d_y_scale alienbridge%,0.6 ' Init at space station for now 3d_position aliendisc%,x(3)+shome,y(3)+shome,z(3)+shome 3d_position alienbridge%,x(3)+shome,y(3)+shome,z(3)+shome 3d_color aliendisc%,20,60,50 3d_color alienbridge%,10,40,70
' Initialize objects for collision 3d_collision_as_faces ship% : ' Idea is to rotate ship so that its wide shape fits in door! 3d_collision_as_faces stnhub% : ' Also need all other parts added 3d_collision_as_faces stndoor% : ' The good one to hit
' Point the alien at us 3d_point_object aliendisc%,ship%:3d_point_object alienbridge%,ship%
' View from inside space ship; we will move/rotate both together cam_position sx,sy,sz
' MAIN LOOP (Timer) ' -=-=-=-=-=-=-=-=-=-=- ' on_close 0,fin timer 99 timer_interval 99,10 on_timer 99,action
' === This steps back so you can see the ship for testing ' cam_move -1.5 ' =================
end
' =====================
action: timer_off 99 : ' Not to trigger repeat in loop. select scancode case 38:gosub nosedown: ' up key (some may prefer opposite) case 40:gosub noseup: ' down key case 37:gosub rollleft: ' left key case 39:gosub rollright: ' right key case 81:boost=0.1: ' Q - fast acceleration & decel. case 65:boost=0.01: ' A - medium case 90:boost=0.001: ' Z - fine case 160:gosub accel: ' left shift case 162:gosub decel: ' left control case 32:sp=0: ' SPACE, dead stop (temporary cheat!) case 27:goto fin: ' ESCAPE (Why the warning beep from system?) end_select ' Rotate ship & cam on mouse position mt=2*(mouse_y_position(1)-height(1)/2)/height(1) mu=2*(mouse_x_position(1)-width(1)/2)/width(1) xrot=xrot-mt yrot=yrot-mu 3d_x_rotate ship%,xrot : ' Object rotations are absolute 3d_y_rotate ship%,yrot cam_pitch -1*mt : ' Camera rotations are relative cam_turn mu ' caption 0,"Pitch: "+str$(mt)+" - Yaw: "+str$(mu)
' Continually rotate space station 3d_z_rotate stn%,stnrot 3d_z_rotate stnspk1%,stnrot 3d_z_rotate stnspk2%,stnrot 3d_z_rotate stnring%,stnrot 3d_z_rotate stndoor%,stnrot stnrot=wrap_value(stnrot+0.5): ' Is this necessary? ' Move ship & cam according to current speed cam_move sp 3d_move ship%,sp
' MOVE ALIEN (choose random angle & axis) ala=ala+(rnd(200)-93)/1000 : ' odd calc due to bias in random if use rnd(2)-1, tweak neg number for stable direction alaxis=rnd(2) : ' Just choose an axis to rotate round at random select alaxis case 0 : 3d_x_rotate aliendisc%,ala:3d_x_rotate alienbridge%,ala case 1 : 3d_y_rotate aliendisc%,ala:3d_y_rotate alienbridge%,ala case 2 : 3d_z_rotate aliendisc%,ala:3d_z_rotate alienbridge%,ala end_select 3d_move aliendisc%,0.05:3d_move alienbridge%,0.05
' TESTS ' Docking or collision with space station? (Not perfect, but works, need other objects tested too) if o3d_collision(ship%,stndoor%)=1 then doorhit%=1 if o3d_collision(ship%,stnhub%)=1 then hubhit%=1 if hubhit%=1 : ' Can't avoid hitting hub, but... if doorhit%=0 then message "Crashed!":return : ' ...Missed door. if doorhit%=1 then message "Successfully docked!":return : ' ...hit door. end_if display timer_on 99 return
noseup: cam_pitch t xrot=xrot+t 3d_x_rotate ship%,xrot return
nosedown: cam_pitch -1*t xrot=xrot-t 3d_x_rotate ship%,xrot return
rollleft: cam_roll u zrot=zrot-u 3d_z_rotate ship%,zrot return
rollright: cam_roll -1*u zrot=zrot+u 3d_z_rotate ship%,zrot return
accel: sp=sp+boost caption 0,sp return
decel: sp=sp-boost caption 0,sp return
fin: terminate ' ^^^^^^^^^
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Perdu dans l'espace Mer 6 Nov 2013 - 22:03 | |
| Hello treehouse Perdu dans l’espace mais les pieds sont sur terre ! Merci pour ce programme qui est très prometteur. Je pense que Bignono (le spécialiste 3D) va pouvoir y intégrer quelques améliorations ou autres idées. Nous avons gagné en ta personne un bon Panoramicien. Tous mes encouragements. Continue ainsi et amuse-toi bien : Panoramic est formidable !
Dernière édition par papydall le Jeu 7 Nov 2013 - 0:40, édité 1 fois | |
| | | Invité Invité
| Sujet: Re: Perdu dans l'espace Mer 6 Nov 2013 - 22:31 | |
| Bonsoir Treehouse Impressionnant ! Çà commence fort. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Perdu dans l'espace Mer 6 Nov 2013 - 22:39 | |
| Bonsoir treehouse, Oui j'allais dire comme cosmos, joli programme, très réactif, et en si peu de lignes. C'est très prometteur, bravo ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 7:50 | |
| BRAVO je suis impatient de voir la suite.
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 11:00 | |
| Je n'ai pas encore testé, vu que l'intervention pour mon ADSL a été repoussée à vendredi ... mais en tout cas merci pour ce premier partage Je suis sûr que j'y prendrais plaisir. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 13:57 | |
| Bonjour treehouse, Que dire? Que ton programme est excellent et que je n'aurais certainement pas fait mieux!!! Maintenant, je comprend mieux ta question sur 3d_chain! Pouvoir chainer tous les éléments de la station orbitale ensemble, aurait pu économiser plusieurs lignes de code. Mais chainer un dodecahedron avec un box ou un torus ou alors un box avec un cylindre, etc... n'est pas possible. C'est l'accès violation assuré! Je ne vois qu'une seule solution, concevoir la station dans un programme de modèlisation 3D (comme wings3D ou blender, mais il en existe plein d'autres) et enregistrer l'objet 3D ainsi créé en un mesh 3ds. Ainsi, il n'y a plus qu'un seul objet 3D à controler dans le programme. Pour ce qui est de contôler ton vaisseau (ship%, le 3d_box rouge), effectivement, il sort du champ de la caméra au bout d'un moment. J'avais déjà remarqué cela et toute mes tentatives pour y remédier sont restées vaines. Je crois me souvenir que Jack avait dit qu'avec les commandes cam_pitch, cam_turn, cam_roll, cam_move les mouvements de la caméra étaient trop saccadés. Ceci explique peut-être le problème de sortie du champ de vision. En plus je crois qu'il avait dit qu'il n'était pas bon d'utiliser les touches flèchées (scancode 38 à 40) pour contrôler la camera. Je ne vois qu'une seule solution, si tu veux diriger ton vaisseau et la caméra avec les touches fléchées, c'est d'utiliser cam_position avec des calculs plus complexes. Il faut que la caméra, soit, se place à l'intérieur de ton vaisseau et prend les même coordonnées que lui, soit, elle suit l'arrière de ton vaisseau afin de voir évoluer celui-ci dans l'espace. Voilà, sinon mes félicitations pour ce super programme! A+ Hello treehouse, That to say? That your program is excellent and that I would not certainly have done better!!! Now, me includes better your question on 3d_chain! To be able to chain all the elements of the orbiting space station together, would have been able to save several lines of code. But to chain a 3d_dodecahedron with a 3d_box or a 3d_torus or then a 3d_box with a 3d_cylinder, etc. is not possible. It is the access violation insurant! I see only a single solution, to conceive(design) the orbital station in a program of 3D modelling (as wings3D or blender, but he(it) exists height of others there) And register(record) the 3D object so created in a mesh 3ds. So, there is not more than a single 3D object in check(Control) in the program. To check(control) your vessel (ship %, the red 3d_box), effectively, he(it) goes out of the field of the camera after a while. I had already noticed it and quite my attempts for it to remedy remained vain. I believe to remember that Jack had said that with the commands(orders) Cam_pitch, cam_turn, cam_roll, cam_move the movements of the camera were too jerky. This explain maybe the problem of exit(release) of the field of vision. Besides I believe that he had said that it was not good to use arrowed touches (scancode 38 - 40) to check(control) her(it) will be on drugs. I see only a single solution, if you want to manage your vessel and the camera with touches arrowed, it is to use cam_position with more complex calculations. It is necessary that the camera, either, he takes place inside your vessel and sets even coordinated as, or, she(it) follows the back of your vessel to see evolving this one in the space. Here we are, otherwise my congratulations for this great program! Bye bye | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 14:38 | |
| J'ai essayé de faire une station orbital avec Wings3d! Pas très difficile à première vue: 1°) j'ai créé un tore 2°) une sphère au centre du tore 3°) un cylindre traversant ma sphère 4°) un tube reliant de part et d'autre le tore en passant par la sphère et 5°) j'ai dupliqué le tube et je l'ai fait tourner à 90° sur l'axe y je n'ai eu plus qu'à combiner les 5 objets et les exporter en 3ds! J'ai bricolé une pseudo texture avec photofiltre studio à partir d'une autre, et voilà le résultat sur mon webdav dans le dossier 3D, fichier orbital.zip I tried to make a station orbital with Wings3d! Not very difficult at first sight: 1 °) I created a torus 2 °) a sphere in the center of the torus 3 °) a cylinder crossing my sphere 4 °) a tube connecting(binding) on both sides the torus by way of the sphere And 5 °) I duplicated the tube and I made him(it) turn(shoot) in 90 ° on the Y axis I did not have more than to combine(organize) 5 objects and to export them 3ds there! I tinkered a so called texture with photofilter studio from an other one, and here is a result on my webdav in the 3D file(case), the orbital.zip file web dav: http://www.mydrive.ch/username : panoramic@bignono password : panoramic123 | |
| | | treehouse
Nombre de messages : 28 Localisation : UK Date d'inscription : 21/10/2013
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 17:57 | |
| Merci à tous pour vos gentils commentaires ! - bignono a écrit:
- Je crois me souvenir que Jack avait dit qu'avec les commandes cam_pitch, cam_turn, cam_roll, cam_move les mouvements de la caméra étaient trop saccadés. Ceci explique peut-être le problème de sortie du champ de vision.
Intéressant, mais je ne pense pas que les touches fléchées fonctionnent différemment des alpha-numériques ceux. Certaines méthodes remplir la mémoire tampon du clavier, mais ce serait la même pour les différentes touches. Comme la caméra et la boîte sont sollicités à chaque passage dans le code, je pense que le problème est causé par de très petites différences de valeurs (entre cam_move etc et 3d_move etc), qui s'accumulent progressivement dans une grande différence dans la position. En fait, l'angle ne semble pas aussi mauvais que la position. Malheureusement, à partir de mes expériences, il semble que l'utilisation cam_position de placer la caméra à l'intérieur de la boîte réinitialise également la direction de pointage de la caméra. - Citation :
- En plus je crois qu'il avait dit qu'il n'était pas bon d'utiliser les touches flèchées (scancode 38 à 40) pour contrôler la camera.
Je ne vois qu'une seule solution, si tu veux diriger ton vaisseau et la caméra avec les touches fléchées, c'est d'utiliser cam_position avec des calculs plus complexes. Il faut que la caméra, soit, se place à l'intérieur de ton vaisseau et prend les même coordonnées que lui, soit, elle suit l'arrière de ton vaisseau afin de voir évoluer celui-ci dans l'espace. Cette dernière est une bonne solution car l'appareil peut être aligné avec un objet, mais non l'un des axes d'un objet. Je préfère, cependant, de ne pas le faire. Il faudrait l'objet à être belle et prendre le temps de traitement précieuse! Et vous ne voudriez pas voir ce qui est juste en face de vous. Le vaisseau serait en cours de route. Merci aussi pour l'aide au sujet de la construction d'objets 3D, et je vais télécharger votre station spatiale bientôt. Ma méthode pour extraterrestres intelligents cause plus de mal que ce que j'attendais ! "Ta-ta!" | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 19:38 | |
| sorry y have a "no correct expression line 201" Panoramic Editor V 0.9.24 can you see that? thank you | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 19:58 | |
| La version V 0.9.24 que tu utilises ne reconnait pas CAM_PITCH A ; CAM_TURN A ; CAM_ROLL A ; CAM_MOVE d ; POINT_OBJECT N
Ces commandes sont celles de la version V 0.9.25i2.
Mets-toi à jour et ça ira ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 20:00 | |
| Pour ce code, il faut prendre la 25i.3 du 05/09/2013. A+
On s'est croisé Papydall, mais le message est le même. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 20:09 | |
| @Minstorm, Attention: conserve la version V09.24 qui est une version "régulière" et pas limitée, ce qui n'est pas le cas de de la V09.25i.3 A+ | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 20:57 | |
| peut on installer cette version sans ecraser la precedante? merci | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 21:18 | |
| Oui, tu la garde dans un répertoire (dossier) différent de l'autre version. A+ | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Perdu dans l'espace Jeu 7 Nov 2013 - 21:34 | |
| merci ça marche tres beau jeu avec des idees a reprendre very funny thanks | |
| | | treehouse
Nombre de messages : 28 Localisation : UK Date d'inscription : 21/10/2013
| Sujet: Re: Perdu dans l'espace Lun 11 Nov 2013 - 1:35 | |
| Bignono, désolé pour le retard. J'ai eu un coup d'œil à vos orbital.bas et c'est incroyable. En outre, vous préempté ma poser des questions sur la façon de concevoir les objets pour enregistrer et charger comme .3ds. Je vais essayer un logiciel pour le faire. Pour tester s'écraser ou amarrage réussi, je peux encore besoin d'un porte séparée à l'intérieur de la station spatiale, mais bien sûr, la forme complexe pourrait être un objet 3D unique, comme vous l'avez indiqué. J'espère que Jack sera en mesure d'ajouter de nouvelles fonctions au Panoramic pour accéder à l'orientation d'un objet dans le système de coordonnées global. Est-il absent pour le moment ? Je n'ai aucune idée si ce sera possible. Peut-être six fonctions seraient nécessaires, deux pour chaque axe, quelque chose comme la déclinaison et ascension droite qui sont utilisés en astronomie. Je me suis rendu compte que mon jeu demande beaucoup du moteur 3D et/ou le programmeur, et mes compétences sont très rouillé ! Je peux avoir besoin de changer la façon dont je déplacer et faire pivoter l'objet "ship" et cam de garder les déplacer comme un seul. Et cela pourrait signifier la prise en main avec des angles d'Euler, les mathématiques matricielles et autres joyeusetés. Malgré cela, je ne vois pas comment il est possible avec les commandes et fonctions actuellement disponibles. Peut-être que s'il y avait un 3d_point_position x, y, z pour les objets, j'ai pu travailler sur quelque chose impliquant coordonnées vers lequel tant le cam et "ship" peut pointer . Ils peuvent être donnés la même position absolue, mais seulement le cam peuvent faire point_position x, y, z. Inversement, on peut obtenir o3d_x_position(N), etc, mais pas o3d_x_position(CAM). Je ne suis pas sûr de capacités supplémentaires permettrait de résoudre le problème, mais j'espère que Jack (ou un autre) peut trouver un moyen. Eh bien , désolé de taper sur ce sujet. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Perdu dans l'espace Lun 11 Nov 2013 - 10:12 | |
| Bonjour treehouse, Je ne comprends pas très bien votre question. Certainement une mauvaise traduction de google. Mais ce n'est pas grave. Je pense que vous ne savez pas comment déplacer la caméra et votre vaisseau en même temps. Voici un petit programme avec remarques qui peut apporter un début de solution. L'astuce est de représenter la caméra dans un 3d_cube et le point visé par la caméra dans un autre qui peut être aussi le vaisseau. Il suffit ensuite de contrôler les mouvements des 2 cubes ou objets ensemble. Pour les mouvements de rotations et de pivots du vaisseau (case 65 et 90) là je ne sais pas faire. Il y a d'autres calculs plus complexes à rajouter, mais c'est réalisable. J'espère vous avoir aidé A bientôt Hello treehouse, I do not understand very well your question. Certainly a bad translation of Google. But it doesn't matter. I think that you do not know how to move the camera and your vessel at the same time. Here is a small program with remarks who can bring the beginning of solution. The trick(cleverness) is to represent the camera in one 3d_cube and the point aimed by the camera in an other who can be also the vessel. It is then enough to check(control) the movements of 2 cubes or objects together. For the movements of rotations and pivots of the vessel (case 65 and 90) there I do not know how to make. There are other more complex calculations to be added, but it is practicable. I hope to have helped you See you soon (Veuillez excuser la mauvaise traduction, merci) ( Please excuse the bad translation, thank you) - Code:
-
' * key ESC ==> terminate PROGRAM ' Touches arrowed to manage the objects 3d_cube and the camera ' ******************************************************************** ' rot=angle which is the invisible cube of the engine 3d, is 3d_y_rotate mv,rot ' Chy=Y position of the camera, or cam_y_position or chy ' phy=Y position of the point aimed by the camera, or point_y_position or phy ' vrot=Rotation speed when we revolve to the left or to the right (arrows left or right) ' vd=Speed of travel(movement) when we move forward, moves(puts) back, goes right or to the left ' mv=number object of engine 3d =================> 1000 (3d_cube 1000,1) ' pv=number object of point aimed by the camera => 1001 (3d_cube 1001,1) (in your program, the ship ?)
dim rot,chy,phy,vrot,vd,mv,pv rot=180:chy=1.5:phy=1.5:vrot=1:vd=0.2
label move
full_space 0:scene3d 1:full_space 1:color 1,0,0,255
3d_plane number_3d_objects+1:3d_x_rotate number_3d_objects,90 3d_color number_3d_objects,0,255,0:3d_scale number_3d_objects,100,100,1
3d_cone number_3d_objects+1,10,3:3d_color number_3d_objects,255,255,0
3d_cube 1000,1:' Driving vehicle (camera) 3d_y_rotate 1000,rot 3d_move 1000,-13:' you can use point_position 3d_hide 1000:' invisible mv=1000
3d_cube 1001,1:' Driving vehicle (point_position) ' 3d_hide 1001: ' The object must be hidden in normal use pv=1001
timer 200:timer_interval 200,1:on_timer 200,move end
move: timer_off 200 select scancode case 27:terminate case 37:rot=rot+vrot:3d_y_rotate mv,rot case 39:rot=rot-vrot:3d_y_rotate mv,rot case 38:3d_move mv,vd case 40:3d_move mv,vd-(2*vd) ' case 65:3d_z_rotate mv,o3d_z_rotate(mv)-1 ' case 90:3d_z_rotate mv,o3d_z_rotate(mv)+1 end_select ' case 65 and case 90 need more complex calculations
3d_position pv,o3d_x_position(mv),o3d_y_position(mv),o3d_z_position(mv) 3d_rotate pv,o3d_x_rotate(mv),o3d_y_rotate(mv),o3d_z_rotate(mv) 3d_move pv,1 cam_position o3d_x_position(mv),chy,o3d_z_position(mv) point_position o3d_x_position(pv),phy,o3d_z_position(pv)
timer_on 200 return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Perdu dans l'espace Lun 11 Nov 2013 - 10:40 | |
| En tout cas, j'ai testé le programme, c'est très prometteur pour le jeu. J'ai hâte de voir la suite que tu programmera treehouse. Peut être que je pourrais retrouver les joies que j'ai connus plus jeune en jouant à xwing ou à tie-fighter Si on arrive a des jeux aussi amusants, je crois que les programmeurs pourront être plutôt fier. Je mets la barre haut, mais bon en tout cas le début de ce jeu promet beaucoup et je ne peux pas m’empêcher de rêver | |
| | | treehouse
Nombre de messages : 28 Localisation : UK Date d'inscription : 21/10/2013
| Sujet: Re: Perdu dans l'espace Lun 11 Nov 2013 - 17:53 | |
| Salut Bignono, Oui, en effet, ce sont des sujets difficiles dans sa propre langue ! Je suis très reconnaissant. J'ai fait face à deux problèmes particuliers, et vous avez résolu l'un d'eux, à savoir, comment pointer l'objet ship_ dans la même direction que la caméra. (je me sers "_" dans des mots comme " ship_ " pour arrêter google leur traduction (par exemple, "navire" ???) ) J'aurais pensé à cela, car il ya quelques jours, j'ai utilisé la même technique pour faire mes aliens(?) à pointer dans la direction dans laquelle ils voyagent. J'ai créé un cube invisible et placé en face de l'étranger(?). J'ai calculé une trajectoire pour l'étranger en utilisant X, Y et Z coordonne directement (pas des angles), il était donc facile. Je viens de mettre le cube invisible à la somme de la position de coordonnées et la vitesse, dans chaque dimension, et fait 3d_point_object. (merci de me dire comment je dois traduire "alien" ! Il peut signifier étranger, un autre pays, mais peut-être l'un dit «étranger» en français. Je veux dire, bien sûr, un "extraterrestre", pas un Anglais !) Le deuxième problème est encore plus difficile à décrire (et de résoudre). Si on lit sur la géométrie en trois dimensions et la compare avec la 2D, on apprend que les mouvements en 3D ont une complexité supplémentaire. Comme je l'ai dit plus tôt, les rotations en 3D ne sont pas "commutative" (alors qu'ils sont en 2D). Je vais vous expliquer mieux que je peux dans un instant. Tout d'abord, je dois dire que c'est à la limite de ma compréhension, donc je ne suis pas sûr que ce soit la nature exacte du problème. Commutatif(?): l'addition est commutative et la multiplication est commutative. Ainsi : 4 +7 +8 = 8 +4 +7 4 * 7 * 8 = 8 * 7 * 4 etc De la même façon, se déplacer dans deux dimensions, l'ordre des opérations n'a pas d'importance. Si on se promène du nord à 20 pas, puis au sud-ouest pendant encore 40 pas, on arrive au même point que si on marche 40 pas vers le sud-ouest puis 20 vers le nord. Mais en 3D, ce n'est pas le cas. Si je comprends bien, ce sont surtout les angles qui sont importants. C'est-à-dire, si nous n'agissons pas à travers une distance, mais simplement tourner, la fonction (résultat non-commutative ) peut être observée. Pour le démontrer, faire pivoter un objet (la main) autour de "l'axe x" , puis autour de l'axe y. Ensuite, répétez les actions dans l'ordre inverse. Il est important de comprendre la différence entre le système de coordonnées (global / scene3D / universel) et les axes locaux d'un objet. Chaque fois que nous disons, par exemple 3d_x_rotate N, A nous faisons tourner l'objet N autour de son propre axe x. Si l'objet a déjà été mis en rotation autour de l'axe y ou z, l'axe x correspond plus avec l'axe X universel. La plupart des jeux que nous appelons «3D» sont en fait en 2D, avec une troisième (la hauteur) totalement indépendant des autres. Cela signifie que l'on peut garder la trace de la position des objets sur le plan du sol assez facilement. Il peut encore exiger sinus et cosinus, mais, comme dans votre exemple, nous faisons tourner autour d'un seul axe (y). Ayant dit tout cela, vous avez résolu une grande partie de ma difficulté. Avec ça, je devrais être en mesure de toujours garder le ship_ et le camera_ à la même position et correctement orientée. Si je peux résoudre le problème reste, je peux calculer les informations dont dispose un pilote dans le cockpit, précisément, l'aspect (orientation ?) - Désolé , très difficile à traduire. En anglais, range_ and_ bearing_ . Le range_ est la distance. Le bearing_ est l'angle. Encore une fois, cela montre la différence entre 2D et 3D. Nous pouvons simplement dire "20km ; 174 degrés" en 2D. Dans un vaisseau spatial, nous avons notre horizon local (notre plan XZ local) et nous devons donner deux mesures angulaires: on décrit l'angle d'une cible autour de cet horizon local, l'autre, l'angle au-dessus ou en dessous. Universal X, Y, et Z sont complètement hors de propos, en effet, aucun sens. C'est la nature des voyages dans l'espace ! Je veux donner au joueur un écran radar 3D (ou quelque chose de similaire) par lequel il peut voir les objets autour de lui. Sinon, il saura que ce qu'il peut voir à l'extérieur du pare-brise. Ce sera comme la conduite sans rétroviseur ! Aussi je voudrais lui donner bearings_ (comment dire ?) pour la navigation sur des planètes ou des systèmes d'étoiles qui sont trop loin pour voir. Je peux aussi vous permettre camera_ de tourner indépendamment de la ship_, afin qu'il puisse regarder à gauche, droite, haut, etc, mais ce serait mieux si ce n'était pas le seul moyen. A la fin de la journée (?), je crois que j'ai besoin de comprendre les mathématiques vectoriels beaucoup mieux! J'espère que c'est tout compréhensible. Merci également à mindstorm et Jicehel pour l'encouragement. J'espère Syzygy sera à la hauteur des attentes. C'est ce qu'elle sera appelée, je crois. Soit dit en passant, mes aliens(?) ne sont pas prêt à aller à l'université, mais ils ont descendu des arbres et ils ont des pouces opposable. "Warm regards" treehouse | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Perdu dans l'espace Mar 12 Nov 2013 - 19:08 | |
| Hello treehouse Study these 2 programs and see if it can use(get) for your game(set,play)! See you soon - Code:
-
dim rep$:rep$="C:\jeubasic\3d\travail\":dir_change rep$: ' <=== to change, to adapt "rep$" dim vrot:vrot=1 full_space 0:scene3d 1:full_space 1:color 1,0,0,0 cam_position 10,10,10:light_position 10,10,10
' 3d_skybox 1 ' 3d_load_texture_top 1,"texture3.bmp" ' 3d_load_texture_left 1,"texture3.bmp" ' 3d_load_texture_back 1,"texture3.bmp" ' 3d_load_texture_front 1,"texture3.bmp" ' 3d_load_texture_right 1,"texture3.bmp" ' 3d_load_texture_bottom 1,"texture3.bmp"
3d_box 2,10000000,1,10000000:3d_position 2,1,-5000000,1:3d_color 2,250,000,000:' 3d_load_texture 2,"texture3.bmp":' 3d_hide 2 3d_box 3,10000000,10000000,1:3d_position 3,1,1,05000000:3d_color 3,000,250,000:' 3d_load_texture 3,"texture3.bmp":' 3d_hide 3 3d_box 4,10000000,10000000,1:3d_position 4,1,1,-5000000:3d_color 4,000,000,250:' 3d_load_texture 4,"texture3.bmp":' 3d_hide 4 3d_box 5,10000000,1,10000000:3d_position 5,1,05000000,1:3d_color 5,250,250,000:' 3d_load_texture 5,"texture3.bmp":' 3d_hide 5 3d_box 6,1,10000000,10000000:3d_position 6,-5000000,1,1:3d_color 6,250,000,250:' 3d_load_texture 6,"texture3.bmp":' 3d_hide 6 3d_box 7,1,10000000,10000000:3d_position 7,05000000,1,1:3d_color 7,000,250,250:' 3d_load_texture 7,"texture3.bmp":' 3d_hide 7
axes_show
' 3d_mesh 8:3d_load_object 8,"VAISSEAU2.3ds":3d_load_texture 8,"texture1.bmp":3d_position 8,1,1,1 3d_cube 8,6:3d_scale 8,0.1,1,1 3d_cube 9,5:3d_scale 9,1,0.1,1
while scancode <>27 if scancode=37 then cam_turn vrot*-1 :' camera turn to the left ==========> Key "left arrow" if scancode=39 then cam_turn vrot :' camera turn to the right =========> Key "right arrow" if scancode=38 then cam_move 0.1 :' camera Move forward ==============> Key "up arrow" if scancode=40 then cam_move -0.1 :' camera Move back =================> Key "down arrow" if scancode=86 then cam_roll vrot*-1 :' camera roll to the left ==========> Key "V" if scancode=78 then cam_roll vrot :' camera roll to the right =========> Key "N" if scancode=66 then cam_pitch vrot*-1 :' camera looping down ==============> Key "B" if scancode=72 then cam_pitch vrot :' camera looping up ================> Key "H" if scancode=79 then cam_position 10,10,10 :' camera origine ===================> Key "O" if scancode=65 then point_object 4 :' camera towards -Z ===============> Key "A" if scancode=90 then point_object 3 :' camera towards +Z ===============> Key "Z" if scancode=84 then point_object 2 :' camera towards -Y ===============> Key "T" if scancode=89 then point_object 5 :' camera towards +Y ===============> Key "Y" if scancode=87 then point_object 6 :' camera towards -X ===============> Key "W" if scancode=88 then point_object 7 :' camera towards +X ===============> Key "X" end_while terminate
- Code:
-
dim rep$:rep$="C:\jeubasic\3d\travail\":dir_change rep$: ' <=== to change, to adapt "rep$" dim d,rx,ry,rz,px,py,pz,vrot:vrot=1:' px=1:py=1:pz=1 full_space 0:scene3d 1:full_space 1:color 1,0,0,0 cam_position 10,10,10:light_position 10,10,10
' 3d_skybox 1 ' 3d_load_texture_top 1,"texture3.bmp" ' 3d_load_texture_left 1,"texture3.bmp" ' 3d_load_texture_back 1,"texture3.bmp" ' 3d_load_texture_front 1,"texture3.bmp" ' 3d_load_texture_right 1,"texture3.bmp" ' 3d_load_texture_bottom 1,"texture3.bmp"
3d_box 2,10000000,1,10000000:3d_position 2,1,-5000000,1:3d_color 2,250,000,000:' 3d_load_texture 2,"texture3.bmp":' 3d_hide 2 3d_box 3,10000000,10000000,1:3d_position 3,1,1,05000000:3d_color 3,000,250,000:' 3d_load_texture 3,"texture3.bmp":' 3d_hide 3 3d_box 4,10000000,10000000,1:3d_position 4,1,1,-5000000:3d_color 4,000,000,250:' 3d_load_texture 4,"texture3.bmp":' 3d_hide 4 3d_box 5,10000000,1,10000000:3d_position 5,1,05000000,1:3d_color 5,250,250,000:' 3d_load_texture 5,"texture3.bmp":' 3d_hide 5 3d_box 6,1,10000000,10000000:3d_position 6,-5000000,1,1:3d_color 6,250,000,250:' 3d_load_texture 6,"texture3.bmp":' 3d_hide 6 3d_box 7,1,10000000,10000000:3d_position 7,05000000,1,1:3d_color 7,000,250,250:' 3d_load_texture 7,"texture3.bmp":' 3d_hide 7
axes_show
3d_cube 8,6:3d_scale 8,0.1,1,1 3d_cube 9,5:3d_scale 9,1,0.1,1 ' 3d_mesh 8:3d_load_object 8,"VAISSEAU2.3ds" ' 3d_x_rotate 8,rx:3d_position 8,1,1,1: ' 3d_load_texture 8,"texture1.bmp"
while scancode <>27 if scancode=104 then d=d+0.005:' ship Accelerate and Move forward ======> accélère et avance key "8" if scancode=098 then d=d-0.005:' ship Slow down and stop ===============> freine et s'arrête key "2" if scancode=100 then ry=ry+1:' ship turn to the left =================> tourne à gauche key "4" if scancode=102 then ry=ry-1:' ship turn to the right ================> tourne à droite key "6" if scancode=034 then rx=rx-1:' ship Fall forward and come down(fall) => pique en avant et descend key "page down" if scancode=033 then rx=rx+1:' ship ascension ========================> pointe en l'air et monte key "page up" if scancode=097 then rz=rz-1:' ship roll left ===> fait 1 tonneau sur la gauche key "1" if scancode=099 then rz=rz+1:' ship roll rigt ===> fait 1 tonneau sur la droite key "3" if scancode=107 then py=py+0.05:' ship go up =================> monte key "+" if scancode=109 then py=py-0.05:' ship go down ===============> descend key "-" 3d_rotate 8,rx,ry,rz:3d_rotate 9,rx,ry,rz 3d_y_position 8,py:3d_y_position 9,py if d>0.1 then d=0.1 if d<0 then d=0 3d_move 8,d:3d_move 9,d px=o3d_x_position(8):py=o3d_y_position(8):pz=o3d_z_position(8) ship() end_while terminate
sub ship() point_position px,py,pz cam_position px-9,py+9,pz-9 end_sub
| |
| | | treehouse
Nombre de messages : 28 Localisation : UK Date d'inscription : 21/10/2013
| Sujet: Re: Perdu dans l'espace Mer 13 Nov 2013 - 14:42 | |
| Oh là là, malheureusement, votre idée ne fonctionne pas dans mon cas, mais j'ai appris quelque chose d'essayer. Je commence à penser à ce problème peut-être être insurmontable, mais je vais voir ce que Jack peut faire. Il est assez déconcertant. Lors du déplacement et la rotation de la caméra, tout va bien. Lors du déplacement et la rotation d'un objet, tout va bien. Vos derniers exemples montrent cela. Mais dans les circonstances spécifiques requis par Elite / Syzygy, un problème se pose. Je pense que le problème se pose lorsque vous pointez la caméra à quelque chose, ou peut-être en plaçant certaines coordonnées. Votre exemple précédent a résolu le problème de mettre la caméra à l'intérieur du ship_ et orientant dans la bonne DIRECTION sur un objet invisible. On peut diriger l'appareil vers l'objet invisible. On peut fixer l'orientation de la caméra autour de son axe z. Donc, tout devrait être bien. Toutefois, je pense que, lorsque vous placez ou pointer caméra, Panoramic_ fait quelque chose de bizarre (peut-être utile dans la plupart des programmes). Je n'ai pas découvert encore exactement ce qu'il fait. Peut-être il oriente automatiquement caméra le bon sens (pour la plupart des programmes). Il en résulte que lorsque mon ship_ tourne autour de l'axe x, il jamais devient inversée. En anglais, nous appelons cette pitching_. Nous disons avion, navire, etc., pitches_. J'ai continuera à essayer de déboguer mon programme. Étant donné que vous travaillez sur certaines de ces questions 3D, peut-être vous pouvez également résoudre ce dernier problème, mais vos exemples ne représentent pas des conditions totalement. Ensuite, vous devez voler dans trois dimensions, à pitch_, turn_ et roll_ et capable de voler à l'envers ou dans n'importe quelle orientation. Je crois que vous devrez utiliser votre technique de placer la caméra à l'intérieur de l'objet ship_ et pointant la caméra sur un objet invisible (mais le laisser visible pour l'essai, bien sûr!). Et je crois que vous découvrirez le problème que je veux parler. Ou, au contraire, vous aimeriez analyser ma dernière version, ci-dessous, et le débogage pour moi. Ou n'importe qui. Mais peut-être écrire un autre programme sans tous les trucs superflu serait utile. Je devrais essayer probablement que le prochain moi-même. Bien sûr, pitching_ et turning_ et rolling_ peuvent être obtenus avec les commandes cam_ pertinentes, et un objet peut être rendu à pitch_ et turn_ et roll_ avec les commandes 3d_rotate. Je le sais. Je faisais tout cela. On pourrait penser que, parce que point_object et point_position ne spécifient pas de montant de « roll_ » de caméra, il suffit de dire (écrire) "cam_roll zrot". Mais aucun. Je pense que c'est parce que cam_roll est « relative ». Il tourne la caméra d'angle, de son orientation actuelle, plutôt qu'à un angle absolu. Ceci est différent de 3d_z_rotate pour un objet qui spécifie une orientation absolue (même si autour de ses propres axes locaux). C'est compliqué ! Merci encore pour travaillé si dur sur cela et pour la lecture de mes longues randonnées. - Code:
-
' Syzygy ' PLEASE NOTE: ESCAPE THEN Alt-F4 to QUIT ' ^^^^^^^^^^^ ' ESCAPE ... ALT-F4 pour quitter.
label action,slowpanel,fin
' number of planets Dim N%: N%=5 ' General control variables dim quit%,cursor%,fps,i% quit%=0:cursor%=1 ' Objects dim j%,ship%,lead%,sol%,halo1%,halo2%,a%,s,m,n,o ' angles a,b, t=pitch step & u=roll step (mousey & ut for mouse) dim a,b,t,u,mousey,mousex,rng ' Space station object indices & variables dim stn%,shome,stnrot,stnspk1%,stnspk2%,stnring%,stnhub%,stndoor%,hubhit%,doorhit% ' Alien indices & vars dim abod%,acab%,dummy%,xd,yd,zd,rngchk%,kill%,au,ar,apch%,ayaw%,u2n,r2n,maxsp ' constants dim pi : pi=3.14159264 ' Arrays for planets' positions x,y,z, orbital radius r dim x(N%+2),y(N%+2),z(N%+2),r(N%+2) ' Ship's variables: position,speed,speed increment,rotations dim sx,sy,sz,sp,boost,xrot,yrot,zrot ' Control Panel dim stickx%,sticky%
sp=0:boost=0.001:stnrot=0:xrot=0:yrot=0:zrot=0 doorhit%=0:hubhit%=0 : ' docking/crash detection t=0.5 : ' pitch increment u=1 : ' roll increment rngchk%=1 au=1:ar=0 maxsp=0.5
border_hide 0 width 0,screen_x:height 0,screen_y color 0,64,64,64 font_color 0,55,55,255 font_bold 0 to_foreground 0
scene3d 1 ' full_space 1 width 1,screen_x-200 height 1,screen_y-70 left 1,100:top 1,10
stickx%=screen_x/2 sticky%=570
cursor_hide 0 cursor_cross 1 ' Sun is light source, at origin, therefore, light_position 0,0,0 ' It's in space! color 1,0,0,0
' 3d_skybox 2 ' 3d_load_texture_bottom 2,"Bitmaps\stars.bmp" ' 3d_load_texture_top 2,"Bitmaps\stars.bmp" ' 3d_load_texture_left 2,"Bitmaps\stars.bmp" ' 3d_load_texture_right 2,"Bitmaps\stars.bmp" ' 3d_load_texture_front 2,"Bitmaps\stars.bmp" ' 3d_load_texture_back 2,"Bitmaps\stars.bmp"
' Planets created first to keep array index (j%) low without offset. Further object indices will be relative to end of array. for j%=3 to N%+2 : ' 3 because of frame(0), scene3d(1), skybox(2); N%+2 as arrays start at zero. a% = rnd(360):' Not degrees, radians, but any large number will do r(j%)=rnd(100000)+5000 : ' solar systems are BIG! x(j%)=r(j%)*cos(a%) : ' Circular coordinate y(j%)=(rnd(2000)-1000)/20 : ' A random offset from plane z(j%)=r(j%)*sin(a%) : ' Circular coordinate s = power(r(j%),1.3)/5000 : ' size of planet (temp. bigger than nec.) 3d_sphere j%,s 3d_position j%,x(j%),y(j%),z(j%) 3d_color j%,rnd(40),rnd(40),rnd(40) ' special home planet first: if j%=3 ' 3d_load_texture j%,"Bitmaps\tardis_support.bmp" shome=s*2 : ' radius of station rel. to size of planet (smaller=easier to find) 3d_sphere j%+100,s*1.03 : ' safe index offset for (& may have others with) atmosphere 3d_position j%+100,x(j%),y(j%),z(j%) 3d_color j%+100,20,20,155 3d_transparent j%+100,180 end_if next j%
' Sun sol%=j%+1 3d_sphere sol%,800 3d_color sol%,255,245,50
halo1%=sol%+1 3d_sphere halo1%,900 3d_color halo1%,255,210,140 3d_transparent halo1%,190
halo2%=sol%+2 3d_sphere halo2%,1500 3d_color halo2%,255,55,140 3d_transparent halo2%,240
' Initialise spaceship coordinates near space station (for now) sx=x(3)+shome+rnd(100)-50:sy=y(3)+shome+rnd(100)-50:sz=z(3)+shome+rnd(100)-50
ship%=sol%+3 : ' required for collision detection 3d_box ship%,0.8,0.2,0.8 : ' width,thickness,length ' 3d_load_texture ship%,"Bitmaps\flare.bmp"
' Leading object ahead of ship to point camera at (merci bignono!) lead%=sol%+4 3d_cube lead%,2 ' 3d_hide lead% 3d_color lead%,255,255,255 3d_transparent lead%,128
' Several concentric parts of the station follow: stn%=sol%+5 3d_dodecahedron stn% 3d_scale stn%,3,3,3 ' 3d_color stn%,55,55,40 3d_position stn%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stn%,3
' Spokes stnspk1%=sol%+6 3d_box stnspk1%,0.8,20,0.1 ' 3d_color stnspk1%,255,255,240 ' 3d_color stnspk1%,100,100,50 ' 3d_load_texture stnspk1%,"Bitmaps\mcheck4.bmp" 3d_position stnspk1%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnspk1%,3
stnspk2%=sol%+7 3d_box stnspk2%,20,0.8,0.1 ' 3d_color stnspk1%,255,255,240 ' 3d_color stnspk2%,100,100,50 ' 3d_load_texture stnspk1%,"Bitmaps\mcheck4.bmp" 3d_position stnspk2%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnspk2%,3
' Ring stnring%=sol%+8 3d_torus stnring%,10,0.5 3d_position stnring%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnring%,3
' Cylinder hub stnhub%=sol%+9 3d_cylinder stnhub%,3,1.3,1.3 3d_position stnhub%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stnhub%,3 3d_x_rotate stnhub%,90
' Box to give illusion of door (bug?: color 0,0,0 does not cover all sides) stndoor%=sol%+10 3d_box stndoor%,0.3,1.3,3.01 : ' height,width,>cylinderlength 3d_position stndoor%,x(3)+shome,y(3)+shome,z(3)+shome 3d_point_object stndoor%,3 3d_color stndoor%,120,120,10
' "Alien" flying saucer abod%=sol%+11 acab%=sol%+12 3d_sphere abod%,1 3d_sphere acab%,0.25 3d_y_scale abod%,0.06 3d_z_scale abod%,0.5 3d_y_scale acab%,0.6 3d_z_scale acab%,1.6 ' Init at space station for now 3d_position abod%,x(3)+shome,y(3)+shome,z(3)+shome 3d_position acab%,x(3)+shome,y(3)+shome,z(3)+shome 3d_color abod%,20,60,50 3d_color acab%,10,40,70 3d_transparent acab%,80
dummy%=sol%+13 3d_cube dummy%,0.01:3d_hide dummy% : ' Allows us to point alien in its flying direction!
' Initialize objects & methods used for collision 3d_collision_as_faces ship% : ' Idea is to rotate ship so that its wide shape fits in door! 3d_collision_as_faces stnhub% : ' Also need all other parts added 3d_collision_as_faces stndoor% : ' The good one to hit
' View from inside space ship; we will move/rotate both together ' cam_position sx,sy,sz ' point_position x(3)+shome,y(3)+shome,z(3)+shome ' 3d_point_object ship%,stn%
3d_position ship%,sx,sy,sz 3d_point_object ship%,sol% cam_position sx,sy,sz point_object sol% 3d_y_rotate ship%,180 cam_turn 180 ' WHY DOES THIS NOT WORK? ' IT SHOULD BEGIN GAME WITH US LOOKING DIRECTLY AWAY FROM THE SUN!
' on_close 0,fin
timer 99 timer_interval 99,100 on_timer 99,slowpanel
i%=0: ' Counter for fps (frames per second) gosub action ' timer_off_all end ' =====================
' MAIN LOOP action: while quit%=0 i%=i%+1 select scancode case 38:xrot=xrot-t: ' up key (some may prefer opposite) case 40:xrot=xrot+t: ' down key case 37:zrot=zrot-u: ' left key case 39:zrot=zrot+u: ' right key case 81:boost=0.1: ' Q - fast acceleration & decel. case 65:boost=0.01: ' A - medium case 90:boost=0.001: ' Z - fine case 160:sp=sp+boost: ' left shift case 161:sp=sp+boost: ' right shift case 162:sp=sp-boost: ' left control case 163:sp=sp-boost: ' right control case 32:sp=0: ' SPACE, dead stop (temporary cheat!) case 27:goto fin: ' ESCAPE (Why the warning beep from system?) case 67:cursor_cross 1 : ' C (Cross hairs on) case 68:cursor_hide 1 : ' D (-"- off) end_select ' Rotate ship & cam on mouse position mousey=4*(mouse_y_position(1)-height(1)/2)/height(1) mousex=4*(mouse_x_position(1)-width(1)/2)/width(1) xrot=xrot-mousey yrot=yrot-mousex xrot=wrap_value(xrot) yrot=wrap_value(yrot) zrot=wrap_value(zrot) 3d_move ship%,sp 3d_rotate ship%,xrot,yrot,zrot 3d_position lead%,o3d_x_position(ship%),o3d_y_position(ship%),o3d_z_position(ship%) 3d_rotate lead%,xrot,yrot,zrot 3d_move lead%,10 cam_position o3d_x_position(ship%),o3d_y_position(ship%),o3d_z_position(ship%) ' point_position o3d_x_position(lead%),o3d_y_position(lead%),o3d_z_position(lead%) point_object lead% cam_roll -1*zrot
' Continually rotate space station 3d_z_rotate stn%,stnrot 3d_z_rotate stnspk1%,stnrot 3d_z_rotate stnspk2%,stnrot 3d_z_rotate stnring%,stnrot 3d_z_rotate stndoor%,stnrot stnrot=wrap_value(stnrot+0.5): ' Is this necessary? ' MOVE ALIEN xd=o3d_x_position(ship%)-o3d_x_position(abod%) yd=o3d_y_position(ship%)-o3d_y_position(abod%) zd=o3d_z_position(ship%)-o3d_z_position(abod%) rng=sqr(xd*xd+yd*yd+zd*zd) 3d_x_position abod%,o3d_x_position(abod%)+m 3d_y_position abod%,o3d_y_position(abod%)+n 3d_z_position abod%,o3d_z_position(abod%)+o 3d_x_position acab%,o3d_x_position(acab%)+m 3d_y_position acab%,o3d_y_position(acab%)+n 3d_z_position acab%,o3d_z_position(acab%)+o 3d_position dummy%,o3d_x_position(acab%)+m,o3d_y_position(acab%)+n,o3d_z_position(acab%)+o 3d_point_object acab%,dummy% 3d_point_object abod%,dummy% if kill%=0 m=m+0.000000002*power(xd,3)*rng: ' *sgn(xd) n=n+0.000000002*power(yd,3)*rng: ' *sgn(yd) o=o+0.000000002*power(zd,3)*rng: ' *sgn(zd) if abs(m)>maxsp then m=maxsp*sgn(m) if abs(n)>maxsp then n=maxsp*sgn(n) if abs(o)>maxsp then o=maxsp*sgn(o) end_if ' This tries to correct endless orbiting, making alien dive towards us. if rnd(2000)<1 and rng>35 then kill%=30 if kill%>0 m=m*0.9 n=n*0.9 o=o*0.9 kill%=kill%-1 end_if ' orng=rng display
' TESTS ' Docking or collision with space station? (Not perfect, but works) if o3d_collision(ship%,stndoor%)=1 then doorhit%=1 if o3d_collision(ship%,stnhub%)=1 then hubhit%=1 if hubhit%=1 : ' Can't avoid hitting hub, so... if doorhit%=0 then message "Crashed!":quit%=1 : ' ...Missed door. if doorhit%=1 then message "Successfully docked!":quit%=1 : ' ...hit door. end_if end_while : ' Main loop ends when quit%=1 return
' OUTPUT ON DASHBOARD slowpanel: fps=i%*10:i%=0 timer_off 99 : ' No trigger repeat in loop. Also "return" without resetting timer ends game". ' Speed 2d_fill_color 5,255,5 print_locate 2,80:print "Spd ";int(sp*1000);" " ' Position print_locate 2,100:print "X ";int(o3d_x_position(ship%));" " print_locate 2,120:print "Y ";int(o3d_y_position(ship%));" " print_locate 2,140:print "Z ";int(o3d_z_position(ship%));" " ' Alien Position print_locate 2,250:print "aX ";int(o3d_x_position(abod%));" " print_locate 2,270:print "aY ";int(o3d_y_position(abod%));" " print_locate 2,290:print "aZ ";int(o3d_z_position(abod%));" " ' Alien "speed" (kinda) print_locate 2,320:print "aSpd ";int((sqr(m*m+n*n+o*o)*1000));" " ' print_locate 2,340:print "ar ";ar;" " print_locate 2,400:print "Range ";int(rng);".";int(frac(rng)*1000);" " 2d_fill_color 5,5,255 2d_pen_width 1 2d_rectangle stickx%-30,sticky%-30,stickx%+30,sticky%+30 2d_pen_width 2 2d_line stickx%,sticky%,stickx%+sqr(abs(400*mousex))*sgn(mousex),sticky%+sqr(abs(400*mousey))*sgn(mousey) 2d_pen_width 5 2d_line stickx%+sqr(abs(400*mousex))*sgn(mousex),sticky%+sqr(abs(400*mousey))*sgn(mousey),stickx%+sqr(abs(400*mousex))*sgn(mousex),sticky%+sqr(abs(400*mousey))*sgn(mousey)
' My data 2d_fill_color 5,255,255 print_locate screen_x-95,40:print fps;" fps" print_locate screen_x-95,80:print "Mx ";mousex;" " print_locate screen_x-95,100:print "My ";mousey;" " print_locate screen_x-95,140:print "xrot ";xrot;" " print_locate screen_x-95,160:print "yrot ";yrot;" " print_locate screen_x-95,180:print "zrot ";zrot;" "
timer_on 99 return
' ==============
fin: quit%=1 return Par ailleurs, il vous aidera à voir ce qui se passe si vous chargez un fichier « texture » à la 3d_skybox. Points, ou n'importe quel motif contrastant. | |
| | | jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: Perdu dans l'espace Mar 28 Avr 2015 - 13:19 | |
| Salut, J'ai remarqué que quand la caméra ce trouve dans les valeur x y z très eleve (possitif ou négatif) il y a des bug de caméra.
Pour moi il n'y a qu'une raison rationnel: les nombres qui sont grand, est plus de travail pour l'ordinateur. conclusion, il n'arrive pas etre précis. Donc il faut réduire l'echelle du monde pour ne pas ce retrouver trop loing dans une scène 3D.
C'est normal, d'autant plus que si on avez 60 fps, il faudera il qu'il face tout les calcules en fonctions des nombres en 16 millisecondes.
Je joue a un jeu: minecraft, quand on est a des valeurs élever, les items bouges bizarrement au sol. Donc tout les jeux on le meme probleme technique.
Si un ordinateur dois traité le nombre 10 ou 10000000000000000000000000000, il ne mettra pas le même temps. Cela cree des bug graphique. Cela est accentuer dans les jeux video car les images sont generer entre 20 et 60 en moyenne par seconde. | |
| | | jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: Perdu dans l'espace Mar 28 Avr 2015 - 18:51 | |
| | |
| | | treehouse
Nombre de messages : 28 Localisation : UK Date d'inscription : 21/10/2013
| Sujet: Re: Perdu dans l'espace Jeu 30 Avr 2015 - 1:45 | |
| Merci. Malheureusement, je dois plus le temps de travailler avec Panoramic. Surtout parce que je dois essayer de comprendre des textes utiles après leur traduction. C'est la vie. Je vais peut-être revenir à cela plus tard. | |
| | | Contenu sponsorisé
| Sujet: Re: Perdu dans l'espace | |
| |
| | | | Perdu dans l'espace | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |