Aşağıdaki işlevleri kullanarak oyununuza oyun kumandası desteği ekleyin: emin olmanız gerekir.
Oyun Kumandası kitaplığını başlatma ve kaldırma
Paddleboat_init
'ı kullanma
işlevini kullanın.
Paddleboat_ErrorCode Paddleboat_init(JNIEnv *env, jobject jcontext)
Paddleboat_init
iki parametre alır:
JNIEnv
işaretçisi mevcut ileti dizisine eklendi- Bir
jobject
JNI nesnesi referansıContext
türetilmiş sınıf. TümContext
türetilmiş sınıf nesnesi, şunlar dahil ancak bunlarla sınırlı olmamak üzere geçerlidir:Activity
,NativeActivity
, veyaGameActivity
.
Paddleboat_init
karşılığında iade
Başlatma başarılıysa PADDLEBOAT_NO_ERROR
, aksi takdirde uygun bir hata kodu gösterilir
hatası döndürülür.
Oyunun olup olmadığını kontrol etmek için Paddleboat_isInitialized
aracını kullanabilirsiniz
Denetleyici kitaplığı başarıyla başlatıldı. Bir boole değeri döndürür
değer. True (doğru) ise API kullanılabilir.
bool Paddleboat_isInitialized()
Başvuruyu sonlandırmadan önce
Paddleboat_destroy
işlevini kullanın. Fonksiyon, tek bir
parametresini içeren mevcut ileti dizisine ekli bir JNIEnv
öğesine yönlendiren bir işaretçi içerir.
Paddleboat_init
, Paddleboat_destroy
tarihinden sonra tekrar aranabilir.
void Paddleboat_destroy(JNIEnv *env)
Yaşam döngüsü olayları kitaplığına bilgi sağlar
Oyun Kumandası kitaplığı,
etkinlik yaşam döngüsü
onStop
ve
onStart
etkinlikleri.
Şunu çağırın:
Paddleboat_onStop
ve
Paddleboat_onStart
işlevlerini çağırın. Her iki işlev de
tek parametre: mevcut ileti dizisine ekli bir JNIEnv
işaretçisi.
void Paddleboat_onStop(JNIEnv *env)
void Paddleboat_onStart(JNIEnv *env)
Denetleyici durum geri çağırması kaydetme veya kaldırma
Oyun Kumandası kitaplığı, bir oyunu bildirmek için kumanda durumu geri çağırmasını kullanır otomatik olarak devreye girer. Sadece bir kumanda destekler durum geri araması yapabilirsiniz.
- Kumanda durumu geri çağırması kaydetmek veya öncekileri değiştirmek için
yeni bir geri çağırma işleviyle kaydedilmiş geri çağırmayı içeriyorsa,
Paddleboat_setControllerStatusCallback
işlevini kullanın. - Şu anda kayıtlı olan bir geri aramayı kaldırmak için
NULL
veyanullptr
kodunu iletin. userData
parametresi, kullanıcı tanımlı veriler için isteğe bağlı bir işaretçidir. İlgili içeriği oluşturmak için kullanılanuserData
parametresi, geri çağırma işlevine aktarılır. Bu işaretçi amacıyla yapılan sonraki bir çağrıyla değiştirilene kadar dahili olarak saklanır.Paddleboat_setControllerStatusCallback
void Paddleboat_setControllerStatusCallback(Paddleboat_ControllerStatusCallback
statusCallback, void *userData)
Geri çağırma işlevinin işlev imzası şöyledir:
typedef void (*Paddleboat_ControllerStatusCallback)(
const int32_t controllerIndex,
const Paddleboat_ControllerStatus controllerStatus,
void *userData)
Parametre | Açıklama |
---|---|
controllerIndex
|
geri arama. 0 ile arasında bir değer olacaktır PADDLEBOAT_MAX_CONTROLLERS - 1 |
controllerStatus
|
Enum değeri
PADDLEBOAT_CONTROLLER_JUST_CONNECTED veya PADDLEBOAT_CONTROLLER_JUST_DISCONNECTED . |
userData
|
Kullanıcıya yönelik isteğe bağlı bir işaretçi (NULL olabilir)
son çağrıda belirtilen tanımlanmış verileri
Paddleboat_setControllerStatusCallback |
Oyun Kumandası kitaplığını güncelleme işlevini çağırın
Oyun Kumandası kitaplığını güncelleme işlevi,
Paddleboat_update
, tercihen karenin başına yakın bir yerde, oyun çerçevesi başına bir kez çağrılmalıdır.
İşlev tek bir parametre, bir JNIEnv
mevcut ileti dizisi.
void Paddleboat_update(JNIEnv *env)
Etkinlikleri işle
Giriş etkinliklerini alırken oyununuzun şunları yapması gerekir: incelenmek üzere Oyun Kumandası kitaplığına yönlendirin. Oyun Kumandası kitaplığı, bir giriş etkinliğinin, yönetilen etkinliklerinden biriyle ilişkilendirilip ilişkilendirilmediğini değerlendirir cihazlar. Yönetilen cihazlardan gelen etkinlikler işlenir ve kullanılır.
Oyun Kumandası kitaplığı iki tür giriş etkinliğini destekler:
AInputEvents
ve
GameActivity
giriş etkinlikleri.
AInputEvent işleme
Oyununuz AInputEvents
numaralı telefonu arayarak
Paddleboat_processInputEvent
etkinlik işleme kodunuzdan kaldırın.
int32_t Paddleboat_processInputEvent(const AInputEvent *event)
Paddleboat_processInputEvent
, etkinlik yoksayıldıysa 0
değerini ve 1
değerini döndürür
etkinlik Oyun Kumandası kitaplığı tarafından işlenip kullanıldıysa
GameActivity etkinlik işleme
Oyununuzda GameActivity
kullanılıyorsa yönlendir
GameActivityKeyEvent
ve
Arayarak GameActivityMotionEvent
etkinlikleri
Paddleboat_processGameActivityKeyInputEvent
veya
Paddleboat_processGameActivityMotionInputEvent
etkinlik işleme kodunuzdan kaldırın.
int32_t Paddleboat_processGameActivityKeyInputEvent(const void *event,
const size_t eventSize)
int32_t Paddleboat_processGameActivityMotionInputEvent(const void *event,
const size_t eventSize)
Parametre | Açıklama |
---|---|
event
|
Bir GameActivityKeyEvent veya
bağlı olarak GameActivityMotionEvent yapısı
ilişkin temel bilgileri içerir. |
eventSize
|
Etkinliğin bayt cinsinden boyut
event parametresinde iletilen yapı. |
Etkinlik yoksayıldıysa her iki işlev de 0
, etkinlik yoksayıldıysa 1
değerini döndürür.
işlenip Oyun Kumandası kitaplığı tarafından kullanılır.
GameActivity
, aktif hareket ekseninin
GameActivityPointerAxes_enableAxis
işlevini kullanın. İlgili içeriği oluşturmak için kullanılan
Paddleboat_getActiveAxisMask
çağrısı, bağlı kullanıcılar tarafından kullanılan ve o anda etkin olan hareket ekseninin bir bit maskesini döndürür.
kontrol eder.
uint64_t Paddleboat_getActiveAxisMask()
Bunun nasıl yapılacağını gösteren bir örnek için Oyun Kumandası kitaplık örneğine bakın.
GameActivity
kullanır. Örnek, aktif eksen maskesini yoklar ve
Yeni eksen kullanıldığında GameActivity
. Bu işlem
NativeEngine::CheckForNewAxis()
işlevi.
void NativeEngine::CheckForNewAxis() {
// Tell GameActivity about any new axis ids so it reports
// their events
const uint64_t activeAxisIds = Paddleboat_getActiveAxisMask();
uint64_t newAxisIds = activeAxisIds ^ mActiveAxisIds;
if (newAxisIds != 0) {
mActiveAxisIds = activeAxisIds;
int32_t currentAxisId = 0;
while(newAxisIds != 0) {
if ((newAxisIds & 1) != 0) {
LOGD("Enable Axis: %d", currentAxisId);
GameActivityPointerAxes_enableAxis(currentAxisId);
}
++currentAxisId;
newAxisIds >>= 1;
}
}
}
Denetleyicileri okuma
Oyun Kumandası kitaplığı, belirli bir
denetleyici. Geçerli dizin değerleri aralığı: 0
-
PADDLEBOAT_MAX_CONTROLLERS - 1
. İlgili içeriği oluşturmak için kullanılan
Paddleboat_getControllerStatus
işlevi, belirtilen bir denetleyici dizininin durumunu belirler.
Paddleboat_ControllerStatus Paddleboat_getControllerStatus(
const int32_t controllerIndex)
Bağlı bir kumandadan gelen bilgileri okumak için üç işlev vardır.
Paddleboat_getControllerName
işlevi, kumanda cihazının adını alır.Paddleboat_getControllerInfo
işlevi, kumanda cihazının kendisiyle ilgili verileri alır.Paddleboat_getControllerData
işlevi, kumanda girişlerinin mevcut durumunu alır.
Kumanda adı
Paddleboat_getControllerName function
iki giriş parametresi alır: denetleyici dizini, arabellek boyutu ve
denetleyici ad dizesini depolayacak bir arabellek. Ad dizesi
UTF-8 kodlamasını kullanan C dizesi. Cihazın adı dahili olarak alınır
InputDevice.getName()
kullanılıyor.
Paddleboat_getControllerName
, adı başarıyla getirirse şunu döndürür:
PADDLEBOAT_NO_ERROR
, aksi takdirde uygun bir hata kodu döndürülür.
Paddleboat_ErrorCode Paddleboat_getControllerName(const int32_t controllerIndex,
const size_t bufferSize,
char *controllerName);
Parametre | Açıklama |
---|---|
controllerIndex
|
geri arama. 0 ile arasında bir değer olacaktır PADDLEBOAT_MAX_CONTROLLERS - 1 |
bufferSize
|
tarafından geçirilen arabelleğin bayt cinsinden boyutu
controllerName ise ad dizesi şöyle olur.
arabelleğe sığdırmak için gerekirse kısaltılır. |
controllerName
|
bufferSize baytlık arabelleğe yönlendiren bir işaret
olması gerekir. Bu ad,
UTF-8 kodlamasının kullanıldığı bir C dizesi olarak depolanmalıdır. |
Kumanda cihaz bilgileri
Paddleboat_getControllerInfo function
, iki giriş parametresi alır: a
ve Paddleboat_Controller_Info
yapısına işaret eden bir işaretçi içerir.
Paddleboat_Controller_Info
alanı verilerle başarıyla doldurulduysa
Paddleboat_getControllerInfo
, PADDLEBOAT_NO_ERROR
değerini döndürür, aksi takdirde
uygun hata kodu döndürülür.
Paddleboat_ErrorCode Paddleboat_getControllerInfo(const int32_t controllerIndex,
Paddleboat_Controller_Info *controllerInfo)
Paddleboat_Controller_Info
yapısı, cihaza özel bilgiler içerir
öğrenmek istiyorum.
typedef struct Paddleboat_Controller_Info {
uint32_t controllerFlags;
int32_t controllerNumber;
int32_t vendorId;
int32_t productId;
int32_t deviceId;
Paddleboat_Controller_Thumbstick_Precision leftStickPrecision;
Paddleboat_Controller_Thumbstick_Precision rightStickPrecision;
} Paddleboat_Controller_Info;
typedef struct Paddleboat_Controller_Thumbstick_Precision {
float stickFlatX;
float stickFlatY;
float stickFuzzX;
float stickFuzzY;
} Paddleboat_Controller_Thumbstick_Precision;
Bazı struct üyeleri,
Şununla ilişkili: InputDevice
denetleyici:
controllerNumber - InputDevice.getControllerNumber()
vendorId - InputDevice.getVendorId()
productId - InputDevice.getProductId()
deviceId - InputDevice.getId()
stickFlat
değeri, merkezdeki düz konumun kapsamını gösterir. Bu değer, özellikle varsayılan bir merkez "ölü alt bölge" hesaplaması için yararlıdır açık otomatik olarak ortalayan cihazlardır.stickFuzz
değeri, hata toleransını veya hata toleransının ne kadar değer, gürültü ve cihaz hassasiyeti nedeniyle gerçek değerden farklı olabilir sınırlamaları vardır.
Her iki değer de her iki boyutta da maksimum eksen değerine (1.0
) normalleştirilir.
controllerFlags
üyesi, bağımsız bit maskesi uygulanmış bit maskelerinin bir kombinasyonunu içerir
bayraklar ve çok bitli kombinasyon değerleri sunar.
Şu komutla controllerFlags
mantıksal AND
işlemi gerçekleştiriliyor:
PADDLEBOAT_CONTROLLER_LAYOUT_MASK
,
Paddleboat_ControllerButtonLayout
sıralaması. Bu sıralama, düğmeyi belirtir
kumanda tarafından kullanılan ikonografi ve düzen.
enum Paddleboat_ControllerButtonLayout {
// Y
// X B
// A
PADDLEBOAT_CONTROLLER_LAYOUT_STANDARD = 0,
// △
// □ ○
// x
PADDLEBOAT_CONTROLLER_LAYOUT_SHAPES = 1,
// X
// Y A
// B
PADDLEBOAT_CONTROLLER_LAYOUT_REVERSE = 2,
// X Y R1 L1
// A B R2 L2
PADDLEBOAT_CONTROLLER_LAYOUT_ARCADE_STICK = 3,
PADDLEBOAT_CONTROLLER_LAYOUT_MASK = 3
};
Aşağıdaki sabit değerler, yetenek bitlerini tanımlar. Bir denetleyicinin
bir özelliği destekliyorsa mantıksal bir AND
controllerFlags
karşısında sabit kalır. Sıfır olmayan bir sonuç, yeteneğin
tarafından desteklenir.
PADDLEBOAT_CONTROLLER_FLAG_TOUCHPAD
Bu işaret biti ayarlanırsa kumandada entegre bir dokunmatik alan bulunur. Öğe
dokunmatik alana basıldığında, kumanda, PADDLEBOAT_BUTTON_TOUCHPAD
bitini
Paddleboat_Controller_Data.buttonsDown
alanına girin.
PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE
Bu işaret biti ayarlanırsa kumanda bir işaretçi cihaz emülasyonu yapar. İlgili içeriği oluşturmak için kullanılan
Paddleboat_Controller_Data
yapısının virtualPointer
üyesi
sanal işaretçinin mevcut koordinatlarıyla doldurulur.
Kumanda verileri
Paddleboat_getControllerData
işlevi, iki giriş parametresi alır:
ve Paddleboat_Controller_Data
yapısına işaret eden bir işaretçi içerir. Eğer
Paddleboat_Controller_Data
, verilerle başarıyla dolduruldu.
Paddleboat_getControllerInfo
, PADDLEBOAT_NO_ERROR
değerini döndürür, aksi takdirde
uygun hata kodu döndürülür.
Paddleboat_ErrorCode Paddleboat_getControllerData(const int32_t controllerIndex,
Paddleboat_Controller_Data *controllerData)
Paddleboat_Controller_Data
yapısı, geçerli kontrol girişini içerir
değerleridir.
typedef struct Paddleboat_Controller_Data {
uint64_t timestamp;
uint32_t buttonsDown;
Paddleboat_Controller_Thumbstick leftStick;
Paddleboat_Controller_Thumbstick rightStick;
float triggerL1;
float triggerL2;
float triggerR1;
float triggerR2;
Paddleboat_Controller_Pointer virtualPointer;
} Paddleboat_Controller_Data;
typedef struct Paddleboat_Controller_Pointer {
float pointerX;
float pointerY;
} Paddleboat_Controller_Pointer;
typedef struct Paddleboat_Controller_Thumbstick {
float stickX;
float stickY;
} Paddleboat_Controller_Thumbstick;
Değer aralıkları
Giriş türü | Değer aralığı |
---|---|
Resim çubuğu ekseni | -1.0 -1.0 |
Tetikleyiciler | 0.0 -1.0 |
Sanal işaretçiler | 0.0 - pencere genişliği/yüksekliği (piksel cinsinden) |
Yapı ayrıntıları
Yapı üyesi | Açıklama |
---|---|
buttonsDown
|
Düğme başına bit alanı dizisi. Düğme bit maskesi
sabitler paddlebot.h içinde tanımlanır.
ve şununla başlar:
PADDLEBOAT_BUTTON_ . |
timestamp.
|
En son kumanda girişinin zaman damgası unutmayın. Zaman damgası, saat dilimi. |
virtualPointer
|
Sanal işaretçi konumu. Yalnızca
PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE işareti
controllerFlags içinde ayarlandı, aksi takdirde
0.0, 0.0 . |