2011-03-01 67 views
6

我正在看樣品遊戲項目。你能解釋一下這幾行:這條線的含義是什麼?

public static final int GAMEPAD_UP = 0x0040; 

0x0040;有什麼用?

這是全碼:

package com.androidemu; 

public class Emulator { 
    public static final int VIDEO_W = 240; 
    public static final int VIDEO_H = 160; 

    public static final int GAMEPAD_UP  = 0x0040; 
    public static final int GAMEPAD_DOWN = 0x0080; 
    public static final int GAMEPAD_LEFT = 0x0020; 
    public static final int GAMEPAD_RIGHT = 0x0010; 
    public static final int GAMEPAD_A  = 0x0001; 
    public static final int GAMEPAD_B  = 0x0002; 
    public static final int GAMEPAD_SELECT = 0x0004; 
    public static final int GAMEPAD_START = 0x0008; 
    public static final int GAMEPAD_TL  = 0x0200; 
    public static final int GAMEPAD_TR  = 0x0100; 

    public static final int GAMEPAD_A_TURBO = (GAMEPAD_A << 16); 
    public static final int GAMEPAD_B_TURBO = (GAMEPAD_B << 16); 

    public static final int GAMEPAD_UP_LEFT = (GAMEPAD_UP | GAMEPAD_LEFT); 
    public static final int GAMEPAD_UP_RIGHT = (GAMEPAD_UP | GAMEPAD_RIGHT); 
    public static final int GAMEPAD_DOWN_LEFT = (GAMEPAD_DOWN | GAMEPAD_LEFT); 
    public static final int GAMEPAD_DOWN_RIGHT = (GAMEPAD_DOWN | GAMEPAD_RIGHT); 

    public native void setRenderSurface(EmulatorView surface, 
      int width, int height); 
    public native void setKeyStates(int states); 
    public native void setOption(String name, String value); 

    public native boolean initialize(String libdir, String datadir); 
    public native void cleanUp(); 
    public native void reset(); 
    public native void power(); 
    public native boolean loadBIOS(String file); 
    public native boolean loadROM(String file); 
    public native void unloadROM(); 
    public native void pause(); 
    public native void resume(); 
    public native void run(); 
    public native boolean saveState(String file); 
    public native boolean loadState(String file); 

    public void setOption(String name, boolean value) { 
     setOption(name, value ? "true" : "false"); 
    } 

    static { 
     System.loadLibrary("gba"); 
    } 
} 

這些是什麼值的目的是什麼?

+4

有一天,我偶然發現了一個有趣的'double MAX_VALUE = 0x1.fffffffffffffP + 1023'。你永遠不會老去碰到新的東西。 ;) – 2011-03-01 09:10:05

+1

@Peter Lawrey:看到我的回答,這個問題實際上並不那麼愚蠢;) – Gugussee 2011-03-01 09:11:29

+0

我不明白的是爲什麼人們投票選出這樣的問題。 – 2011-03-01 09:36:06

回答

0

這是一個整數常量的定義,十六進制值爲0x0040

+1

沒有任何其他環境,你不能說更多:)當然,你可以猜測。 – 2011-03-01 09:15:01

11

這剛好有一個位設置的值:

00000000000000000000000001000000 

所以,你也可以有,比如說,GAMEPAD_RIGHT=0x0010你可以或兩者值和試驗indivuadlly通過AND'ing的任何人。這在遊戲中很常見,特別是在移動設備上。

這種編碼的目的是優化空間並能夠在一行中測試各種情況。通過使用一位來表示每個可能的遊戲手柄鍵,您可以在一個int上表示(即使在舊的8位控制檯中的一個字節,其中控制檯具有很少的鍵),每個鍵的狀態(它可以是'開'或'關')。

UP + RIGHT,與兩個鍵按下時,得到:

00000000000000000000000001000000 

       OR 

00000000000000000000000000010000 

       = 

00000000000000000000000001010000 
+0

與其他所有人相反,我不需要你的編輯來理解這是怎麼回事,只是GAMEPAD_UP = 0x0040就足以提示(雙關!)看看這是關於什麼;) – Gugussee 2011-03-01 09:34:31

-3

的概念是,該線路分配爲變量GAMEPAD_UP的ASCII代碼。這意味着當事件發生後,您可以在eventHandler(source)方法中找到此事件的來源。

根據來源,你會在遊戲中進行更改。 ;)

+0

Errr,不,它有與ASCII碼無關。它定義了一個*標誌*,稍後用於標識一個'GAMEPAD_UP'按鍵事件。 – 2011-03-01 09:36:07

+0

嘿,我仍然認爲它是在激活或按下特定按鍵時從GAME PAD實際發出的ASCII代碼。因爲我用C語言編寫了一個遊戲代碼,用箭頭鍵在屏幕內移動一個球。我們(編碼員)通常會分配期望的keyvalue的ASCII碼。由於它將在事件處理程序的後面進行檢查,因此它也是一種標誌。爲什麼這麼認真@Andreas_D ... – Selvin 2011-03-01 10:08:15

+0

你指的是關鍵代碼,它們與ASCII不一樣。另外,例子中的常量是16位,ASCII只有7位。 – 2011-03-01 12:14:23

1
public static final int GAMEPAD_UP = 0x0040; 

public static void main(String args[]){ 
    System.out.print(GAMEPAD_UP); 

} 


Output: 64 

0x0040是64(基數10)的十六進制表示(基數16)表示。

+0

+1代碼示例的錯誤答案更糟糕的問題 – 2011-03-01 09:18:37

+1

感謝:D ||||||||| – Abhishek 2011-03-01 09:24:16