Saya mencoba untuk mengizinkan pemain untuk menekan tombol apa saja untuk melanjutkan dari halaman utama. Saya bisa melakukan ini dengan membuat Daftar Tombol dan mengulanginya dan memeriksa salah satunya turun; Namun, saya merasa kode ini jelek dan bertanya-tanya apakah ada cara yang lebih sederhana untuk melakukannya yang tidak saya pikirkan?
Inilah kode saya saat ini:
if (GamePad.GetState(PlayerIndex.One).IsConnected)
{
var buttonList = new List<Buttons>()
{
{Buttons.A},
{Buttons.B},
{Buttons.Y},
{Buttons.X},
{Buttons.Start},
{Buttons.Back},
{Buttons.RightShoulder},
{Buttons.LeftShoulder},
{Buttons.RightTrigger},
{Buttons.LeftTrigger}
};
foreach (var button in buttonList)
{
if (GamePad.GetState(PlayerIndex.One).IsButtonDown(button))
ExitMainMenu= true;
}
}
Jawaban:
Ini harus melakukan pekerjaan. Di akhir setiap pembaruan, simpan status
previousGamePadState
. Maka Anda dapat membandingkan mereka. Ini adalah cara cepat untuk mendeteksi perubahan. Tidak perlu diulang.GamePadState.PacketNumber :
Anda dapat menggunakan PacketNumber untuk menentukan apakah keadaan input telah berubah. Jika nilai PacketNumber tetap sama antara dua panggilan berurutan ke GetState, maka belum ada perubahan dalam input.
EDIT: Diubah ke metode. Ini tidak dijamin berfungsi dengan benar, tetapi harus berfungsi. Juga, karena ini benar-benar mendeteksi perubahan input, jadi jika pengguna melepaskan tombol, hal ini juga terlihat. Saya juga menambahkan
if
untuk mendeteksi gerakan thumbstick, sehingga Anda bisa mengabaikannya setidaknya.Semoga ini bisa membantu Anda. Beri tahu saya, jika tidak sesuai dengan kebutuhan Anda, saya yakin kami bisa menyelesaikannya.
Cara: Mendeteksi Apakah Tombol Pengendali Telah Ditekan Bingkai Ini GamePadState.PacketNumber Properti
sumber
GamePadState
danenum Buttons
, yang lebih dekat ke konteks OP tampaknya menggunakan.Jika Anda tidak keberatan menggunakan Refleksi, Anda dapat menggunakan sesuatu seperti ini (bahkan mungkin ini persis):
sumber
Anda bisa secara manual membuat yang kosong
GamePadState
, dan kemudian memeriksanya (dalam) kesetaraan dengan yang asli saat ini, yang Anda ambil dengan meneleponGamePad.GetState
.sumber
Equals
berbeda; itu membandingkan dua referensi untuk menjadi contoh yang sama. TetapiGamePadState
apakah overload operator == untuk membandingkan nilai-nilai mereka, yang saya tautkan dalam jawaban saya (op_Equality
).Karena Buttons adalah enumaration Anda dapat menggunakan metode Enum.GetValues seperti ini:
sumber