2012年7月26日木曜日

NetBeans でプロジェクトのライセンスを設定する

プロジェクトのディレクトリ/nbproject/project.properties に次の行を追加する。

project.license=プロジェクトライセンス名

「プロジェクトライセンス名」には、mit, gpl20, gpl30, apache20 などが入る。これは、ツール | テンプレート の中のライセンスフォルダに入っている license-***.txt の *** の部分に相当する。

2012年3月10日土曜日

LWJGL の基本 2 - 入力 (Mouse, Keyboard, Controller)

org.lwjgl.input.Mouseorg.lwjgl.input.Keyboardorg.lwjgl.input.Controller クラスおよびインターフェースは LWJGL の入力を司るクラスです。Mouse と Keyboard は一つしかインスタンスはないと仮定しているらしく、static なメソッドで操作します。Controller は org.lwjgl.input.Controllers からインスタンスを取得して使用します。
それぞれの入力状態は poll() メソッドで更新されます。poll() は Display.update() で自動的に呼ばれますので、その後に入力処理を書きます。
入力状態の処理には大きく分けて二つの方法があります。一つ目は、Mouse.isButtonDown(int index) のようにその時点での状態を取得する方法です。しかしこの方法では、poll() 同士の間で変化した状態を知ることはできません。このときは poll したイベントを舐めて処理します。ただ、MouseEvent や KeyEvent のようなクラスがあるのではなく、それぞれの static なイベント処理メソッドを呼んで処理するのが若干ダサイです。next() メソッドで次のイベントに移動し、getEvent*** メソッドでイベントの属性を取得します。
サンプル
import java.util.logging.Level;
import java.util.logging.Logger;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

/**
 * LWJGL のマウス入力のサンプル
 *
 * @author Yuki_M
 */
public class LWJGLInput1 {

    private static final DisplayMode DISPLAY_MODE = new DisplayMode(640, 480);

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        LWJGLInput1 main = new LWJGLInput1();
        main.start();
    }

    public void start() {
        try {
            Display.setDisplayMode(DISPLAY_MODE);
            Display.create();
        } catch (LWJGLException ex) {
            Logger.getLogger(LWJGLInput1.class.getName()).log(Level.SEVERE, null, ex);
            System.exit(0);
        }

        while (!Display.isCloseRequested()) {
            Display.update();
            pollEvents();
        }
        Display.destroy();
    }

    private void pollEvents() {
        if (Mouse.isButtonDown(0)) {
            int x = Mouse.getX();
            int y = Mouse.getY();
            System.out.println("Mouse Down: " + x + ", " + y);
        }
        while (Mouse.next()) {
            int dx = Mouse.getEventDX();
            int dy = Mouse.getEventDY();
            System.out.println("Mouse Move: " + dx + ", " + dy);
        }
    }
}

LWJGL の基本 1 - Display

org.lwjgl.opengl.Display クラスは LWJGL ライブラリの使用するネイティブウィンドウへの static メソッドを持っています。特に重要なものを以下に挙げます。
  • create()
  • update()
  • destroy()
  • setDisplayMode(DisplayMode mode)
setDisplayMode は create する前に呼ばなければいけません。
サンブルコード
package lwjglexercise1;

import java.util.logging.Level;
import java.util.logging.Logger;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.*;

public class LWJGLExercise1 {

    private static final DisplayMode DISPLAY_MODE = new DisplayMode(640, 480);

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        LWJGLExercise1 main = new LWJGLExercise1();
        main.start();
    }

    private void start() {
        try {
            Display.setDisplayMode(DISPLAY_MODE);
            Display.create();
        } catch (LWJGLException ex) {
            Logger.getLogger(LWJGLExercise1.class.getName()).log(Level.SEVERE, null, ex);
            System.exit(0);
        }

        while (!Display.isCloseRequested()) {
            Display.update();
        }
        Display.destroy();
    }
}

2012年2月24日金曜日

Vine Linux に IPA フォントをインストール

Vine Linux 6
$ sudo apt-get install TrueType-ipafont
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了        
以下の追加パッケージがインストールされます:
  TrueType-ipafont-doc TrueType-ipafont-gothic TrueType-ipafont-mincho
以下のパッケージが新たにインストールされます:
  TrueType-ipafont TrueType-ipafont-doc TrueType-ipafont-gothic
  TrueType-ipafont-mincho
アップグレード: 0 個, 新規インストール: 4 個, 削除: 0 個, 保留: 0 個
20.1MB のアーカイブを取得する必要があります。
展開後に 28.6MB のディスク容量が追加消費されます。
続行しますか? [Y/n]
取得:1 http://updates.vinelinux.org 6/i386/main TrueType-ipafont-doc 3.02-1vl6 [11.3kB]
取得:2 http://updates.vinelinux.org 6/i386/main TrueType-ipafont-mincho 3.02-1vl6 [11.5MB]
取得:3 http://updates.vinelinux.org 6/i386/main TrueType-ipafont-gothic 3.02-1vl6 [8556kB]
取得:4 http://updates.vinelinux.org 6/i386/main TrueType-ipafont 3.02-1vl6 [3322B]
20.1MB を 2s 秒で取得しました (8154kB/s)
変更を適用しています...
準備中                                ############################## [100%]
更新/インストール中
  TrueType-ipafont-doc-3.02-1vl6.noarch  ############################## [100%]
  TrueType-ipafont-mincho-3.02-1vl6.noar ############################## [100%]
  TrueType-ipafont-gothic-3.02-1vl6.noar ############################## [100%]
  TrueType-ipafont-3.02-1vl6.noarch      ############################## [100%]
完了

2012年2月19日日曜日

LWJGL の導入

LWJGL (LightWeight Java Game Library) とは、Java でゲームを作るためのライブラリである。OpenGL や OpenAL などの薄いラッパーとなっており、SDL に近いものを感じる。ゲームパッドなども使えるらしい。
日本語の資料が少ないため、Windows 上で、NetBeans で導入の手順を解説したい。ちなみに、最新版は 2012-1-23 にリリースされた 2.8.3 だった。
  1. ダウンロードページから lwjgl-2.8.3.zip, lwjgl-docs-2.8.3.zip, lwjgl-source-2.8.3.zip をダウンロードし、適当なディレクトリに配置する。例として、C:\lwjgl にした。
  2. lwjgl-2.8.3.zip と lwjgl-source-2.8.3.zip を展開する。 lwjgl-docs は Javadoc が入っているファイルで、展開は必要ない。
  3. jar にクラスバスを通す
    1. NetBeans の ツール|ライブラリ から、「新規ライブラリ」
    2. ライブラリ名を "LWJGL-2.8"、ライブラリの種類を「クラスライブラリ」にして「了解」
    3. ライブラリのクラスパスに、jinput.jar, lwjgl.jar, lwjgl_util.jar を追加
    4. ソースに、lwjgl-source-2.8.3.zip を追加
    5. Javadoc に、lwjgl-docs-2.8.3.zip を追加
  4. NetBeans のプロジェクトに LWJGL を追加する
    1. プロジェクトのライブラリに LWJGL-2.8 を追加する
    2. native に入っている DLL にバスを通す。 プロジェクトのプロパティの「実行」タブの中の、「VM オプション」に "-Djava.library.path=C:\lwjgl\native\windows" を追加。

参考リンク

2012年2月11日土曜日

Windows 7 でスリープから勝手に復帰してしまう件

スリープや休止状態にしても次の瞬間には復帰してしまうので困っていた。
イベントログの Power-Troubleshooter を探すと
スリープ解除の原因: デバイス -USB Root Hub
ということなので、USB デバイスを一個ずつ外してみることに。すると、どうもキーボードが原因らしい。
デバイスマネージャーから HID キーボードデバイスのプロパティで、「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする」のチェックを外して解決。


2012年2月7日火曜日

LibreOffice (OpenOffice) Draw の円(楕円)ツールで中心を指定して描く方法

Alt キーを押した状態にすると、始点が中心になる。
Shift キーを押した状態にすると、楕円ツールは円に、円ツールは楕円になる。

2012年1月6日金曜日

関数テンプレートの明示的インスタンス化

テンプレートあれこれ (3) -- 明示的なインスタンス生成


[foo.h]
template <typename T>
T mul(T, T);
[foo.cpp]
template <typename T>
T mul(T x, T y) {
    return x * y;
}
template double mul(double, double);