这条线的意义是什么?

raj*_*aja 6 java

我正在看一个示例游戏项目.你能解释一下这些方面吗:

public static final int GAMEPAD_UP = 0x0040;
Run Code Online (Sandbox Code Playgroud)

有什么用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");
    }
}
Run Code Online (Sandbox Code Playgroud)

这些价值观的目的是什么?

Gug*_*see 11

这是一个只有一位设置的值:

00000000000000000000000001000000
Run Code Online (Sandbox Code Playgroud)

所以你也可以拥有,GAMEPAD_RIGHT=0x0010并且你可以通过AND'ing对OR中的任何一个进行OR值和测试.这在游戏中很常见,特别是在移动设备上.

这种编码的目的是优化空间并能够在一行中测试各种情况.

通过使用一个比特,例如,每个可能的游戏手柄键,您可以在一个int上表示(即使在旧的8位控制台日中的一个字节,控制台上只有很少的键)每个键的状态(它是'on' '或'关').

UP + RIGHT,按下两个键,给出:

00000000000000000000000001000000

               OR

00000000000000000000000000010000

               =

00000000000000000000000001010000
Run Code Online (Sandbox Code Playgroud)


Jan*_*yka 0

这是具有十六进制值的整数常量的定义0x0040