heaps.ioメモ

heaps.ioは、基本的にはHTML5、コンソール向けのゲームを作る為の物でウィンドウスタイルなゲームを作る為の機能は少ないです

github: https://github.com/kubohisa/HeapsioGameBase


■ タイトルバーの設定

 関数などでは設定できません(予約語はあるけど、実装が無い)。コンパイルのhxmlで、

-D windowTitle=mytitle


 プログラム的には

@:privateAccess hxd.Window.getInstance().window.title = title;

でも設定出来るらしい


■ 初期ウィンドウサイズ

 コンパイルのhxmlで、

-D windowSize=680x380


■ Resize処理

override public function onResize() { 
    super.onResize(); 
    s2d.scaleMode = ScaleMode.LetterBox(320, 260, false); 

 } 

で、320x260のゲーム画面をウィンドウサイズへ合わせてオートで画面を表示する。シーン=(ウィンドウサイズでは無い)ゲーム画面の像解度設定も行っているので、init()時、

override function init() {
    onResize();

と実行する


■ 画面の基本色の設定

engine.backgroundColor = 0x403750;


■ 画像データなどへのアクセス

 リソースマネジメント を見ること。HashLinkでの初期化処理は

import hxd.Res;
hxd.res.Resource.LIVE_UPDATE = true;
Res.initLocal();

で、普通はinit()へ置いて初期化する


■ アンチエイリアス

s2d.defaultSmooth = true;

s2d はSceneクラスへアクセスできるクラス


■ ウィンドウのサイズの変更

engine.resize(256, 240);


■ グローバルなs2d

 ルートのs2d(SDLで言う画面のハンドルな物)をグローバル化する為には静的拡張なオブジェクトでライブラリを作成する

package hoge;
class Grap {
  public static var parent: h2d.Scene;

  public static function init(p: h2d.Scene) {

    parent = p;

  }

そして、Mainのinit()で

import hoge.*;

hoge.Grap.init(s2d);

と設定、

import hoge.*;

hoge.Grap.parent

で使える。(わぁ、GolangでSDLプログラミングした時、出てきた部分だ)


■ 画像データの単位

 画像データの単位は「Tile(タイル)」です。他のゲームエンジンなどでの呼び方imageなどではありません。その辺の表記の揺らぎがドキュメントを読みにくくしてます


■ とりあえず、キャラ表示が出来た

var s = new h2d.Bitmap(hxd.Res.hxlogo.toTile(), hoge.Grap.parent); 
s.x = 100; 
s.y = 10; 


var obj = new h2d.Object(hoge.Grap.parent);
new h2d.Bitmap(hxd.Res.hxlogo.toTile(), obj); 
obj.x = 10; 

obj.y = 100; 

obj.rotation = 100;

 もしかして、HSP? Heaps.ioはクセ強すぎて、総当たりで調べるの疲れたよ…

 var dad:h2d.Object; dad = new h2d.Object(hoge.Grap.parent);や、dad.remove();で親オブジェクト作って、削除とかで画面表示とかだな


■ BMFONT表示

 BMFFONT(ビットマップフォント)を表示する。/resでFont.fntがあるとして、

public static function font(text: String, x: Float, y: Float, size: Int) { 
  var tf = new h2d.Text(hxd.Res.Font.toSdfFont(size, 0, 0.5, 0.5), parent); 
  tf.text = text; 

  tf.x = x; 

  tf.y = y; 

になる。Heaps.ioでは、tffフォントを使えないので、Latin(000000)を選んでアルファベット+数字のみでメッセージ表示するのが現実的だ

 Sitesの方の方法でShiftJISな文字数の(100x100)漢字ビットマップフォントを作ったら6MB程度だったので、それでもありかと。60pxでの縮小表示でも、ちゃんと見れるし

 【付記】変なエラーが発生。XML、PNGでBit depthは8bitでfntファイル作成で、tf.rotation = 3.1416;にて表示出来ている


■ フルスクリーン

public static var engine: h3d.Engine;


public static function init(e: h3d.Engine) {
  engine = e;

}


public static function fullScreen() {

  if (hxd.Key.isReleased(hxd.Key.DELETE)) {

    engine.fullScreen = !engine.fullScreen;

  }

}


■ マウス

static function hoge() {

  // 実ゲーム画面の解像度

  var interaction = new h2d.Interactive(256, 192, hoge.Grap.parent);


  interaction.onRelease = function(event : hxd.Event) {

    // ウィンドウを拡大すると小数点単位の誤差が出るので丸めている

    var x = Math.round(event.relX);

    var y = Math.round(event.relY);

    trace(x + ":" + y);

  }

}


■ ウィンドウを閉じる。ゲーム終了

hxd.System.exit();


■ 画像の拡大と回転

public static function copyDx(no: Int, x: Float, y: Float, dx: Float, dy: Float, ?r: Float) {

    var obj = new h2d.Object(dad);
    

    var t = tile[no];

    t = t.center();

    new h2d.Bitmap(t, obj);

    

    obj.x = x + (t.width / 2);

    obj.y = y + (t.height / 2);

    obj.scaleX = dx;

    obj.scaleY = dy;

    

    if (r != null) {

        obj.rotate(Math.PI / 180 * r);

    }

}

 t = t.center();で画像のセンターを設定して、オブジェクトの表示座標もずらしてます。rは角度で設定


■ 強制ガベージ・コレクタ?

var cache = new hxd.impl.CacheAllocator();

cache.gc();


■ コンパイル

https://lib.haxe.org/p/hlc-compiler
を使ってコンパイル。基本的にはウェブにある

haxelib run hlc-compiler --srcDir out\c --outFile bin\main --hlLibDir c:\hashlink\1.11.0\ --copyRuntimeFiles --exFile c:\Windows\System32\dbghelp.dll --saveCmd out\c\run_gcc.bat -w

でコンパイルが可能。ただ、hlc_main.cでバグがあるため、

https://github.com/HaxeFoundation/hashlink/blob/f5e7b4ffb50bcad13945cc536ee049b38ee8d771/src/hlc_main.c

のソースで、hashlinkのフォルダのincludeにあるhlc_main.cを書き換えればコンパイル可能


 あと、出力フォルダでresフォルダとデータが無いとゲームが動かない


■ 配布パッケージ

https://github.com/deepnight/redistHelper

 作ったHashlinkゲームを配布するためのフォルダを作成するアプリ(らしい)。Stermへ出る時使われている(らしい)


■ DOS窓の非表示

 HashLinkの場合、BATファイルで

start hl hoge.hl

で非表示可能


 コンパイルの場合は

hl.UI.closeConsole();

で非表示


■ Sites

Old Haxe Doc: http://old.haxe.org/doc

Haxe Code Cookbook: https://code.haxe.org/


Heaps offical samples: https://github.com/HeapsIO/heaps/tree/master/samples

Heaps.io documentation: https://heaps.io/documentation/home.html

Heaps.io API: https://heaps.io/api/


BMFont(Bitmap Font Generator) でビットマップフォントを作る方法: http://nakamura001.hatenablog.com/entry/20120910/1347241168


kubohisaの『ゲームプログラミングが判らない』

0コメント

  • 1000 / 1000