2

Mac OS X(10.7.3)のゲームパッドからアナログスティックでマウスを操作するアプリを作っています。現在、かなりうまく機能しており、デスクトップとほとんどのゲームでカーソルを制御できます。しかし、Team Fortress 2 では、照準を制御することはできませんが、メニューでカーソルを制御することはできます。マウスホイールとクリックはどこでも機能します。もう1つの奇妙なことは、実際のマウスを動かすと、通常の照準を合わせる前に、照準が「仮想マウス」からの移動距離を「ジャンプ」するため、イベントを受け取ることです。

ゲームオプション「生のマウス入力」が無効になっています(osxでもサポートされていないと思います)。また、同様のアプリケーションで照準をうまく制御できます。

ゲームが「デルタ移動」または「相対移動」イベントなどを探していると思われますが、コードは絶対位置を使用してカーソルの位置を設定します。これを変更する方法はわかりません。

mouseMoved イベントを送信するために使用されるコードのスニペットを次に示します。

編集:くだらないコードが削除されました!

. 編集:

また、この方法を行ったため、カーソルがクレイジーにならないように、画面の境界を手動で確認する必要があります。そのため、マルチスクリーン設定で、ユーザーが解像度を変更すると、最悪の状態になります。移動量を送信するだけで、OSにカーソルの制約を任せることができれば、はるかに良いでしょう。

.

問題は 、マウス移動イベントを間違った方法で行っているかということです。

どうすればこれを修正できますか?

EDIT2:それはただのばかげたバグでした、ごめんなさい= P

4

2 に答える 2

1

デルタ値で CGSetIntegerValueField(kCGEventMouseDeltaX, ...) (および Y) を呼び出すのを忘れました... =P

于 2012-05-04T05:41:26.653 に答える
0

CGEventSetIntegerValueFieldほんの数時間のグーグル検索と実験の後、ようやくこれが機能するようにkCGMouseEventDeltaXなりました:)ロドリゴはkCGMouseEventDeltaY、マウスイベントを作成した後、マウスイベントを何度も呼び出す必要があると言おうとしていたようです。

PyObjC を使用した私のコード:

from Quartz.CoreGraphics import (
    CGEventCreate,
    CGEventCreateMouseEvent,
    CGEventGetLocation,
    CGEventPost,
    CGEventSetIntegerValueField,
    kCGEventMouseMoved,
    kCGHIDEventTap,
    kCGMouseEventDeltaX,
    kCGMouseEventDeltaY,
    )

def mouse_delta(delta_x, delta_y):
    """
    Send a MouseMoved event with the given deltaX and deltaY attributes,
    but without changing the cursor location.
    """
    # Might be a better way to get the current mouse location
    x, y = CGEventGetLocation(CGEventCreate(None))
    # The `mouseButton` parameter to CGEventCreateMouseEvent is ignored
    # unless `mouseType` is kCGEventOtherMouse{Down,Dragged,Up},
    # so let's just pass the value 0
    event = CGEventCreateMouseEvent(None, kCGEventMouseMoved, (x, y), 0)
    CGEventSetIntegerValueField(event, kCGMouseEventDeltaX, delta_x)
    CGEventSetIntegerValueField(event, kCGMouseEventDeltaY, delta_y)
    return CGEventPost(kCGHIDEventTap, event)
于 2015-09-12T17:12:58.507 に答える