【SWIG】DxLibのラッパーファイルを一かr(ry

トントン
記事: 100
登録日時: 14年前

【SWIG】DxLibのラッパーファイルを一かr(ry

投稿記事 by トントン » 11年前

1から作るのは保留にしました。
なんていうか、コード書いててストレス溜まってきたので。

というわけで、既存からあるファイルを修正して作成しなおしました。

CODE:

use strict;
use warnings;
use autodie;
use FindBin;
use lib qw($FindBin::Bin);
use utf8;
use DxLib;

my $dx = DxLib::SwigDxLib->new();

$dx->change_window_mode(1);
$dx->set_window_size(600, 600);
$dx->set_main_window_text("Sample");
$dx->dx_lib_init();
$dx->set_draw_screen($DxLib::DX_SCREEN_BACK);

my $image = $dx->load_graph('pict.png');
my $name = DxLib::new_charp();
$dx->key_input_string(0, 16, 30, $name, 0);

my $x = DxLib::new_intp();
my $y = DxLib::new_intp();
DxLib::intp_assign($x, 30);
DxLib::intp_assign($y, 40);
print "$x, $y\n";
print DxLib::intp_value($x).",". DxLib::intp_value($y)."\n";

my $size = 1.0;
while (!$dx->screen_flip() && !$dx->process_message() && !$dx->clear_draw_screen() && $dx->check_hit_key($DxLib::KEY_INPUT_ESCAPE) == 0) {
	my $mouse = $dx->get_mouse_input();
	my $wheel = $dx->get_mouse_wheel_rot_vol();
	$dx->get_mouse_point($x, $y);
	if ($mouse & $DxLib::MOUSE_INPUT_LEFT) {
		$dx->draw_string(0, 0, $name, $dx->get_color(255,255,0));
	}
	if ($wheel > 0) {
		$size += 0.1;
	}
	if ($wheel draw_rota_graph(DxLib::intp_value($x), DxLib::intp_value($y), $size, 0.0, $image, 1, 0);
	my $r = DxLib::intp_value($x).",".DxLib::intp_value($y);
	$dx->draw_string(0, 30, $r, $dx->get_color(255, 255, 0));
}

DxLib::delete_intp($x);
DxLib::delete_intp($y);
DxLib::delete_charp($name);
$dx->dx_lib_end();

CODE:

#coding: UTF-8
import PyDxLib

dx = PyDxLib.SwigDxLib()

dx.ChangeWindowMode(1)
dx.DxLib_Init()
dx.SetDrawScreen(PyDxLib.DX_SCREEN_BACK)


x = 320;
y = 240
pic = "pict.png"
handle = dx.LoadGraph(pic)
cr = dx.GetColor(0, 200, 0)
vec = PyDxLib.VECTOR()
vec.x = 100
vec.y = 100
vec.z = 0
while dx.ScreenFlip() == 0 and dx.ProcessMessage() == 0 and dx.ClearDrawScreen() == 0 :
	dx.DrawLine3D( vec, dx.VGet( 300.0, 200.0, 0.0 ), dx.GetColor( 255,255,255 ) ) ;
	if dx.CheckHitKey(PyDxLib.KEY_INPUT_RIGHT) >= 1 :
		x += 1
	if dx.CheckHitKey(PyDxLib.KEY_INPUT_DOWN) >= 1 :
		y += 1
	if dx.CheckHitKey(PyDxLib.KEY_INPUT_LEFT) >= 1:
		x -= 1
	if dx.CheckHitKey(PyDxLib.KEY_INPUT_UP) >= 1:
		y -= 1

	dx.DrawString(0, 0, 'test', cr)
	dx.DrawRotaGraph(x, y, 1.0, 0.0, handle, 1, 0)
dx.DxLib_End()


前回と何が変わったかというと

・PascalCaseでもスネークケースでも書けるようになった。(Perl,Pythonどっちでも書けます。script言語の美しさはスネークケースにありという強者はぜひ。)
・char型の参照渡しはnew_charpで代用できるようになった。(※でもGetHitKeyStateAllはアウト)
・構造体をクラス感覚で使用できるようになった。(例でいうとVECTOR)
・謎な落ちる現象がなくなった(使用する関数次第では逝くかも。後、new_intpで宣言したポインタの不適切な使用方法でも逝くかも)
・関数の使用方法が公式リファレンスと同じになった(前回までは変則的に使用した関数もあり)

その他は前回から変わっていません。

公開するバイナリはPerl5.16とPython3.3です。

興味がある方は使用してみてください。
添付ファイル

[拡張子 zip は無効化されているため、表示できません]


コメントはまだありません。