Bon, voici la réponse au problème.
Tout d'abord, vous devrez le faire manuellement. Je suppose également que vous connaissez SDL2 et C++.
* Note: Je ne fais défiler que pour Y-Axis (vous pouvez le faire pour les deux si vous voulez).
Tout d'abord nous aurons besoin des variables:
int scrolling; // flag (scrolling or not)
int scroll_sensitivity = 40; // how fast we want to scroll
double scroll_Y = 0; // current scrolling amount (on Y-Axis)
double scroll_acceleration; // scrolling speed
double scroll_friction = 0.001; // how fast we decelerate
double scroll_prev_pos; // previous event's position
Après que vous aurez besoin de gérer l'événement SDL_MultiGesture:
case SDL_MULTIGESTURE:{
if(event.mgesture.numFingers == 2){
if(scrolling == 0){
scrolling = 1;
scroll_prev_pos = event.mgesture.y;
} else{
double dy = event.mgesture.y - scroll_prev_pos;
scroll_acceleration = dy * 40;
scroll_prev_pos = event.mgesture.y;
scrolling = 1;
}
}
break;
}
, nous devons également arrêter le défilement sur l'événement SDL_FingerDown:
case SDL_FINGERDOWN:{
scrolling = 0;
break;
}
Ensuite, nous voulons mettre à jour scroll_Y (mettez-le dans votre fonction "mise à jour"):
if(scrolling){
if(scroll_acceleration > 0) scroll_acceleration -= scroll_friction;
if(scroll_acceleration < 0) scroll_acceleration += scroll_friction;
if(abs(scroll_acceleration) < 0.0005) scroll_acceleration = 0;
scroll_Y += scroll_sensitivity * scroll_acceleration;
// Here you have to set your scrolling bounds i.e. if(scroll_Y < 0) scroll_Y = 0;
}
Enfin, nous voulons rendre selon nos valeurs de défilement:
SDL_Rect rect = {some_x, some_y + scroll_Y, some_w, some_h};
SDL_RenderCopy(renderer, some_texture, NULL, &rect);
This is it!
J'ai une application entièrement fonctionnelle avec le code ci-dessus, donc je suis sûr à 100% que cela fonctionne comme supposé. Si vous avez des problèmes (parce que ce n'est pas du code réel, c'est plus comme un algorithme), contactez-moi. Comme je l'ai mentionné précédemment, je suppose que vous connaissez déjà assez bien SDL et C++, donc je crois que vous êtes capable de comprendre la mise en œuvre. En outre, je sais que cette solution peut devenir meilleure, donc si vous avez quelque chose à ajouter/modifier, dites-le!
Passez une bonne journée!
La question semble un peu vague et large dans la portée.Pouvez-vous le réduire un peu, en donnant peut-être un exemple de ce que vous avez actuellement et en expliquant comment vous voulez modifier le comportement? – paddy
Je veux implémenter le défilement inertiel en utilisant SDL2 (probablement avec SDL_MultiGesture) et je veux de l'aide ou un exemple pour cela. –