Salut les scripteurs fous,
J'ai un problème de saccades avec un script de Bullet cam et je le prouve:
Test Bullet Cam (http://www.youtube.com/watch?v=cYMEyeLraKw#ws)
Le script camera.sqf utilisé:
Citer_projectile = nearestobject [_this select 0,_this select 4];
setacctime 0.2;
_camera = "camera" camCreate (getpos _projectile);
_camera cameraeffect ["internal", "back"];
while{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.01;
};
if(alive _camera)then{sleep 1};
_camera cameraeffect ["terminate", "back"];
camdestroy _camera;
setacctime 1;
Avec dans l'init de l'unité:
Citerthis addeventhandler ["fired",{_this execVM "cam.sqf"}]
C'est le sleep le problème. Celui dans la boucle alive projectile.
( le sleep 0.01;)
Essaie de le réduire un peu.
C'est en secondes, donc 0.01 ça donne du 10ms ... ça devrait pas saccader comme ça parce que 10ms c'est pas beaucoup du tout :-/
J'ai rien compris sans me vanter... :cool2:
Tu me dis que 10 ms c'est pas beaucoup mais tu me demandes de le réduire... Moi pas comprendre. ???
Edit: Ayé j'ai trouvé, merci. :plusun:
Encore moi... :rireniais:
Bullet Cam 2 (http://www.youtube.com/watch?v=OrnTfLHVbLc#ws)
Quelle variable je modifie pour que la caméra se rapproche un peu plus du gus ?
Dis comment tu as résolu le problème si tu l'a résolu, ça peut être utile à d'autres.
Je disais : dans le bout de code :
Citerwhile{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.01;
};
L'instruction SLEEP 0.01 me semble être le problème.
SLEEP => Attendre
0.01 => Pendant 0.01 secondes (soit 10 ms).
Mais d'un autre côté, 10ms c'est très peu de temps donc la saccade que cette pause induit devrait être a peine visible...
Voilà :)
EDIT : Cam 2 : je sais pas.
J'ai l'impression que la balle que tu tires est considérée "morte" avant d'arriver sur le mec et que donc la caméra s'arrête.
Arf merde... Bon bah je vais fouiner, merci comme même.
Pour le "problème" initial j'ai modifié comme tu m'as dit. Ce qui donne:
Citer_projectile = nearestobject [_this select 0,_this select 4];
setacctime 0.2;
_camera = "camera" camCreate (getpos _projectile);
_camera cameraeffect ["internal", "back"];
while{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.0009;
};
if(alive _camera)then{sleep 1};
_camera cameraeffect ["terminate", "back"];
camdestroy _camera;
setacctime 1;
En fait je suis au boulot donc c'est coton pour t'aider vraiment :p
Si j'ai le temps ce soir je fais un test et je te dirais.
Dans l'immédiat je vois qu'une solution : mettre un
Citerplayer sidechat "Projectile mort";
dans le code.
-->
Citer_projectile = nearestobject [_this select 0,_this select 4];
setacctime 0.2;
_camera = "camera" camCreate (getpos _projectile);
_camera cameraeffect ["internal", "back"];
while{alive _projectile && alive _camera}do
{
_camera camSetTarget _projectile;
_camera camSetRelPos [0,-13,1.2];
_camera camCommit 0;
sleep 0.0009;
};
player sidechat "Projectile mort";
if(alive _camera)then{sleep 1};
_camera cameraeffect ["terminate", "back"];
camdestroy _camera;
setacctime 1;
Ca te permettra de savoir pile poil quand le projectile passe en "mort".
(en fait tu crée la caméra, tu la prépositionne, et ensuite ya une boucle tant-que "projectile vivant et caméra vivante" faire bouger ma caméra à l'emplacement du projectile et attendre xxxxxx.xxxxxx secondes. Si la caméra arrête de bouger c'est que le projectile est considéré comme mort. Donc au pire on peut forcer la caméra à bouger encore un peu :) ).
Cela fait très longtemps que je n'ai plus touché à "camera.sqf", mais il me semble que tu te positionnes la camera loin derrière la balle, ce qui fait que lorsque la balle touche le quidam ta camera se trouve à la distance que tu vois sur le film. Je te propose de modifier la variable indiquant où se trouve la camera. Mon comment à deux balles ;)
AH OUI !
Le "CamSetRelPos" est à -13 !!
Remonte un peu la valeur vers -5 et ça devrais aller :D
MERCI RICCO !!
impec ! :plusun:
;)