mieki256's diary



2018/02/20(火) [n年前の日記]

#1 [dxruby] DXOpalでタイルマップBG描画その4

DXOpalを使って、タイルマップBGを描画する実験をしているわけだけど。32x32ドットの時は Firefox ESR 上で60FPSを出せなかったけど、少しサイズを大きくして、48x48 にしたらどうなるだろうかと疑問が湧いたので試してみたり。

_DXOpal fake draw_tile (1chip: 48x48 ver.)

640x480ドットのウインドウサイズ、レイヤーを3枚描画してる状態。カーソルキーの入力で、任意の方向にスクロールできるようにしてある。

Firefox ESR上では…。ちょっと危ないけど、なんとか60FPS出てる…ように見えなくもない…かな…。ただ、CPU使用率は20%前後をウロウロしてるので、もう少し何かしらの処理を追加したら、すぐに処理落ちしそうな予感もあるのだけれど。

ちなみに、 Google Chrome で動かすと、CPU使用率は13%前後。

Tiled のデータも置いときます。License : CC0 / Public Domain ってことで。

_atari_test_48x48_chip.png
_atari_test_48x48.tmx
_atari_test_48x48.json

余談。 :

jsonファイルを読み込んで、DXRuby の Window.draw_tile() で使える形に変換するあたりは、クラスにして別ファイルに分けてみたり。

また、アレコレ動作確認する際に、サイズの違うタイルマップデータをファイルコピーして作業するのが面倒になってきたので、全部のマップデータを置いといて、スクリプト実行時に数値を指定すれば利用するマップデータも変えられるようにしてみたり。

マップデータは、以下で一覧が見れる…だろうか…。全部、License : CC0 / Public Domain ってことで。

_mapdata/

#2 [dxruby][ruby] RubyスクリプトがOpal上で動いてるかどうかを判別する方法ってあるのかな

今現在、DXRuby と DXOpal の両方で、最低限の修正で動くようなスクリプトソースを書いているつもりではあるのだけれど。そのRubyスクリプトソースが、Opal(DXOpal)上で動いているのか、ローカル(DXRuby)で動いてるかを判別する方法があれば、一々ソースを修正して動かさなくても済みそうだなと思えてきたわけで。

しかし、そんな方法はあるのだろうか…。

require 'opal' がされてるかどうかを判別できればいいのかな? でも、どうやって判別すればいいのだろう。もしかして、名前が定義されているかどうかを調べればいいのだろうか。

ググってみたものの、検索キーワードがマズいのか、それらしい情報には遭遇せず。Ruby で、「既に require 'hoge' されてるか調べる」ってのは、どうやるんだろうなあ…。

2018/03/01追記。 :

コメント欄でDXOpal作者様から判別方法を教えていただけました。ありがとうございます。助かります。

if RUBY_ENGINE == "opal"
  # DXOpal
else
  # DXRuby
end
または、
if RUBY_ENGINE == "ruby"
  # DXRuby
else
  # DXOpal
end
こんな感じかしら。

動作確認してみたけれど、ちゃんと動いてる模様。一々ファイルを修正しなくても動作確認ができるので、かなり楽になりそう。ありがたや…。

_constant Object::RUBY_ENGINE (Ruby 2.5.0)
RUBY_ENGINE -> String
Ruby処理系実装の種類を表す文字列。

constant Object::RUBY_ENGINE (Ruby 2.5.0) より

こんな定数があったのか…。勉強になった…。

この記事へのツッコミ

Re: RubyスクリプトがOpal上で動いてるかどうかを判別する方法ってあるのかな by yhara    2018/02/22 18:19
RUBY_ENGINE == "opal" でいけますね (CRubyだと"ruby"になります)。

#3 [javascript] ACEエディタを複数並べるあたりで悩んだり

JavaScriptで書かれた ACEエディタというものがあると先日知ってちょこちょこ使い始めているのだけど、複数のソースを並べて表示させる方法が分からなくて悩んだり。

今のところ、以下のような書き方をしちゃってるけど…。これでいいのだろうか…。本当に合ってるのか…? もっと上手い書き方があるのでは…?
  <h2>Source code</h2>

  <h3><a href="main.rb">main.rb</a></h3>
  <div id="editor1" class="editor"></div>

  <h3><a href="dxrbmapjson.rb">dxrbmapjson.rb</a></h3>
  <div id="editor2" class="editor"></div>

  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.1/ace.js" charset="utf-8"></script>

  <script>
    var file_list = [{
        id: "editor1",
        filename: "main.rb"
      },
      {
        id: "editor2",
        filename: "dxrbmapjson.rb"
      }
    ];
    var editors = (file_list).map(function(file_info) {
      var id = file_info["id"];
      var filename = file_info["filename"];
      var editor = new ace.edit(id);
      // editor.setTheme("ace/theme/chrome");
      editor.getSession().setMode("ace/mode/ruby");
      // editor.setFontSize(16);
      $.get(filename, function(rb) {
        editor.setValue(rb, -1); // -1: set cursor to document start
      });
      return editor;
    });
  </script>

以上、1 日分です。

過去ログ表示

Prev - 2018/02 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project