2011-03-01 68 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