7
votes

Pourquoi cgwarpmoussiorposition provoque-t-elle un retard? Si ce n'est pas le cas, quel est?

J'ai un code ici qui limite la souris à une région à l'écran, elle fonctionne relativement bien, avec un seul gros problème. La souris ne se déplace pas proprement / en douceur lorsqu'elle s'exécute sur les bords de la région, elle saute à la place d'une manière très agitée, je pense que cela pourrait être dû à cgwarpmousecursorposition causant un retard sur chaque "chaîne".

Quelqu'un peut-il dire si c'est quelque chose dans mon code qui cause ce délai ou s'il est en fait la fonction de chaîne de la souris. Si c'est la fonction de déformation de la souris, est-ce que je peux obtenir une relocalisation en douceur de la souris? J'ai fait la même chose en flash et ça marche parfaitement, je sais que la boucle n'est pas juste de prendre Tant de temps pour exécuter que cela ralentit les choses parce qu'elle ne fonctionne que 4 ou 5 fois. xxx


4 commentaires

Je ne pense pas que ce soit lent; Timing It, le plus long que je l'ai eu à prendre était de 0,006 secondes. Cela pourrait être mieux à quelques façons, cependant: vous devez définir la région délimitée dans une NS- ou CGRRECT, et je pense que vous pouvez couper la boucle.


Le rectangle n'est qu'un outil de démonstration temporaire. Je vais essayer de tester cela contre un bitmap noir et blanc, où les zones de pixels noirs sont respectueuses de la souris et les zones blanches que la souris ne peut pas entrer. La forme de la zone noire sera jolie bizarre et je pense donc que la boucle peut être nécessaire. Sauf si vous avez une meilleure solution?


Cela pourrait en fait faciliter la recherche de savoir si la souris est sortie de la zone acceptable. L'astuce consisterait à trouver le point acceptable le plus proche pour le déplacer, mais oui, je pense que vous aurez besoin d'une boucle pour cela. Quoi qu'il en soit, je suis surpris de simplement modifier l'emplacement et le delta de l'événement (ou même la modification et le retour d'une copie) ne fonctionne pas.


Oui, modifier apparemment l'emplacement de l'événement ne peut pas déplacer le curseur de la souris, cela aurait été trop simple. Je pense que je pense de déterminer le point acceptable le plus proche de déplacer le curseur, une approche utilisant un peu de trigonométrie pour les lignes de projet fonctionnerait, mais cela nécessiterait une sorte d'algorithme intense pour tester tous les points de chaque ligne jusqu'à ce qu'il puisse trouver le bord de La région ... Cela semble trop intensif en ressources car il pourrait y avoir quelque chose comme 200 lignes qui auraient que chacun doit avoir jusqu'à 200 pixels vérifiés pour Black / Blanc ....


3 Réponses :


1
votes

1 commentaires

Oui, j'ai trouvé que l'autre jour, mais cela fonctionne parfaitement, alors je vais vous donner la réponse. Merci pour votre temps / effort.



7
votes

Comme vous l'avez découvert, cgsetlocaleventsSuppressionInterval corrige votre problème.

Cependant, il est obsolète à partir de 10.6. L'Etat des Documents Apple:

Cette fonction n'est pas recommandée pour une utilisation générale en raison de cas spéciaux non documentés et d'effets secondaires indésirables. Le remplacement recommandé de cette fonction est cgeventsourcesetlocaleventsSuppressionInterval , ce qui permet d'ajuster l'intervalle de suppression d'une source d'événement spécifique, affectant uniquement des événements publiés à l'aide de cette source d'événement.

Malheureusement, le remplacement cgeventsourcesetlocaleventsSuppressionInterval ne fonctionne pas avec cgwarpmousecursorposition Mouvements.

à la place, utilisez cgassociatemouseandmousecursor (vrai) immédiatement après la chaîne: xxx

La documentation ne fait aucune mention de ce comportement, mais il semble annuler l'intervalle de suppression après la chaîne. < / p>


1 commentaires

Cgassociatemouseandmousecursorposition (vrai) ne supprime pas le retard pour moi malheureusement



4
votes

Je pourrais obtenir cgeventsourcesetlocalteventsSuppressionInterval Pour fonctionner avec cgwarpmousecursorposition La manière suivante: xxx

Ceci fonctionne bien avec cgwarpmousecursorposition (et n'est pas obsolète), alors que cgassociatemouseandmousecursorposition (vrai) n'était d'aucune aide pour moi.


0 commentaires