2017/04/26(水) [n年前の日記]
#1 [python] pycairoを勉強中
_先日書いたドット絵モドキを生成するRubyスクリプト
を、Pythonで書き直し中。
ちなみに、python で cairo を使いたいなら、pycairo というライブラリを導入すればOK…なんだけど、Windows上ではインストール方法が…。
とりあえず自分は、 _PyGTK 経由で、 _http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/ から pygtk-all-in-one をDLしてインストールして済ませてしまった、ような気がするけど、どうだったかな…。たしかそのはず…。昔、GIMP で Python-Fu を動かす時にはコレが必要だったので、ついでに Python 2.7用もインストールしたのではなかったかな…。まあ、Python 2.6/2.7用しか公開されてないし、バージョンも古いみたいだから、最新版をインストールできる方法があるならそちらも試してみたいところ。
ちなみに、python で cairo を使いたいなら、pycairo というライブラリを導入すればOK…なんだけど、Windows上ではインストール方法が…。
とりあえず自分は、 _PyGTK 経由で、 _http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/ から pygtk-all-in-one をDLしてインストールして済ませてしまった、ような気がするけど、どうだったかな…。たしかそのはず…。昔、GIMP で Python-Fu を動かす時にはコレが必要だったので、ついでに Python 2.7用もインストールしたのではなかったかな…。まあ、Python 2.6/2.7用しか公開されてないし、バージョンも古いみたいだから、最新版をインストールできる方法があるならそちらも試してみたいところ。
◎ rounded_rectangleについて。 :
角丸矩形を描画してくれる rounded_rectangle() が pycairo には無くてちょっと悩んでしまったり。たぶんコレ、Ruby から cairo を使える rcairo というライブラリで、独自に追加実装された機能、なのではないかなと…。
どうやって実装するのだろうとググっていたら、cairo の使用サンプルソースに、同じ処理をするものがあった。
_rounded rectangle
参考にして、Python + pycairo で書き直してみたり。
_rounded_rectangle_test.py
以下で実行すると、描画結果を result.png として出力する。
ちゃんと角丸の四角になってくれた。
どうやって実装するのだろうとググっていたら、cairo の使用サンプルソースに、同じ処理をするものがあった。
_rounded rectangle
参考にして、Python + pycairo で書き直してみたり。
_rounded_rectangle_test.py
u""" pycairoの動作テスト. 角が丸い四角を描画して、pngで保存。 動作確認環境: Windows10 x64 + Python 2.7.13 32bit + pycairo 1.8.10 """ import cairo import math def draw_rounder_rectangle(ctx, x, y, w, h, ra): """Set sub path rounded rectangle.""" deg = math.pi / 180.0 ctx.new_sub_path() ctx.arc(x + w - ra, y + ra, ra, -90 * deg, 0 * deg) ctx.arc(x + w - ra, y + h - ra, ra, 0 * deg, 90 * deg) ctx.arc(x + ra, y + h - ra, ra, 90 * deg, 180 * deg) ctx.arc(x + ra, y + ra, ra, 180 * deg, 270 * deg) ctx.close_path() w, h = 640, 480 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h) ctx = cairo.Context(surface) ctx.set_antialias(cairo.ANTIALIAS_SUBPIXEL) ctx.set_line_width(6.0) x, y = 24, 24 w, h = 480, 320 radius = 32 draw_rounder_rectangle(ctx, x, y, w, h, radius) ctx.set_source_rgb(0, 0, 1) ctx.fill_preserve() ctx.set_source_rgb(0, 1, 0) ctx.stroke() surface.write_to_png("result.png")
以下で実行すると、描画結果を result.png として出力する。
python rounded_rectangle_test.py
ちゃんと角丸の四角になってくれた。
[ ツッコむ ]
#2 [neta] 別の政党の人を大臣にするわけにはいかんのだろうか
バカ妄想です。
日本の場合、各大臣は与党の中から選ばれるのが当たり前だけど。アレって別の政党から選ぶことはできないのかなあ、などとアホなことを妄想してしまったりもして。
ぶっちゃけ自分、自民党の中に復興大臣をやれる人材って居ないんじゃないのと疑ってたりもするわけで。だけど野党の中にはひょっとしたらできそうな人材が居ても…。たぶん、あのへんの政党に任せたら、上からの視点はアレだけど下からの視点についてはカバーしてくれそうな…。
与党だの野党だのに関係なく、「この分野に関しては○○党の○○さんがどう考えても適任やろ。だったらあの人にお願いすべきや。餅は餅屋じゃ。何? 党が違う? そんなもん犬にでも食わせてしまえ」てな人事ができる総理大臣だったら…。自分だったら間違いなく、その総理大臣を100%支持しちゃいますわ。
まあ、そんな展開はあり得ないけど。無理無理。絶対無理。漫画じゃあるまいし。
日本の場合、各大臣は与党の中から選ばれるのが当たり前だけど。アレって別の政党から選ぶことはできないのかなあ、などとアホなことを妄想してしまったりもして。
ぶっちゃけ自分、自民党の中に復興大臣をやれる人材って居ないんじゃないのと疑ってたりもするわけで。だけど野党の中にはひょっとしたらできそうな人材が居ても…。たぶん、あのへんの政党に任せたら、上からの視点はアレだけど下からの視点についてはカバーしてくれそうな…。
与党だの野党だのに関係なく、「この分野に関しては○○党の○○さんがどう考えても適任やろ。だったらあの人にお願いすべきや。餅は餅屋じゃ。何? 党が違う? そんなもん犬にでも食わせてしまえ」てな人事ができる総理大臣だったら…。自分だったら間違いなく、その総理大臣を100%支持しちゃいますわ。
まあ、そんな展開はあり得ないけど。無理無理。絶対無理。漫画じゃあるまいし。
◎ 東映アニメーションがスゴイよなと思っていたり。 :
日本のアニメスタジオの中には、東映アニメーションというスタジオがあって。東映動画を前身とする、歴史あるスタジオなんですが。
事例としては少ないのだろうけど、東映アニメーション所属の演出家さんが、他のアニメスタジオに出向と言う形で入って監督として仕事をしてる時があるらしいのですよ。スタジオジブリに入って仕事した監督さんも居るし、ボンズに入って仕事した監督さんも居るし…。 *1
どういう仕組み・契約になっているのか分からないけど、「お前、ちょっと出向と言う形で○○に行ってこい」と言えてしまう、東映アニメーションのプロデューサーさんってスゴイよなーと思うわけで。
だって、フツー、優秀な人材は自分のところで抱え込んで外には出さないものだろうと。本当は他のスタジオでもちょこちょこ仕事してるけど、一応○○スタジオに所属してる身分だからと、変名でこっそり仕事をしているアニメーターさんや演出家さんがちょくちょく居たりもするわけで。それがフツーだよなと。 *2
「コイツの作風考えたら、○○で仕事をさせたら面白い」と考えられる、その姿勢がまずスゴイ。スタジオの枠を超えて各人材のパフォーマンスを最大限に発揮させるべく動けてしまうなんて…。カッコイイ。いや、もちろん、自社にも利益があるようにアレコレ話をつけてるんだろうとは思いますが。 *3
てなわけで、世の中には一応そういう事例もあったりするので、政治の世界でもそういうのができたらカッコイイだろうなあ、などと子供みたいなことを思っちゃったりもするわけで。
でもまあ、党派を超えて会合を開いたりとかやってたりもするらしいので、やれる範囲ではもちろんやってるよー、って感じなんでしょうけど…。さすがに大臣まで、ってのは無理だよなー。アニメ監督はまだしも、大臣はなー。
まあ、寝言というかバカ妄想です。
いや待て。もしかして、政治の世界にも凄腕プロデューサーが居てくれたら…。なんちてぽっくん。
事例としては少ないのだろうけど、東映アニメーション所属の演出家さんが、他のアニメスタジオに出向と言う形で入って監督として仕事をしてる時があるらしいのですよ。スタジオジブリに入って仕事した監督さんも居るし、ボンズに入って仕事した監督さんも居るし…。 *1
どういう仕組み・契約になっているのか分からないけど、「お前、ちょっと出向と言う形で○○に行ってこい」と言えてしまう、東映アニメーションのプロデューサーさんってスゴイよなーと思うわけで。
だって、フツー、優秀な人材は自分のところで抱え込んで外には出さないものだろうと。本当は他のスタジオでもちょこちょこ仕事してるけど、一応○○スタジオに所属してる身分だからと、変名でこっそり仕事をしているアニメーターさんや演出家さんがちょくちょく居たりもするわけで。それがフツーだよなと。 *2
「コイツの作風考えたら、○○で仕事をさせたら面白い」と考えられる、その姿勢がまずスゴイ。スタジオの枠を超えて各人材のパフォーマンスを最大限に発揮させるべく動けてしまうなんて…。カッコイイ。いや、もちろん、自社にも利益があるようにアレコレ話をつけてるんだろうとは思いますが。 *3
てなわけで、世の中には一応そういう事例もあったりするので、政治の世界でもそういうのができたらカッコイイだろうなあ、などと子供みたいなことを思っちゃったりもするわけで。
でもまあ、党派を超えて会合を開いたりとかやってたりもするらしいので、やれる範囲ではもちろんやってるよー、って感じなんでしょうけど…。さすがに大臣まで、ってのは無理だよなー。アニメ監督はまだしも、大臣はなー。
まあ、寝言というかバカ妄想です。
いや待て。もしかして、政治の世界にも凄腕プロデューサーが居てくれたら…。なんちてぽっくん。
[ ツッコむ ]
#3 [prog] ゲーム制作ライブラリがキー入力をイベントで処理させるのってどうなんだろ
ポエムです。
pysdl2 もそうだし、gosu もそうだったと思うけど…。キーが押された瞬間、または離された瞬間にイベントが発生するから、キー入力の処理をしたいならそれらのイベントに対応した処理を書け、てな作りになっていて。
個人的に、そこらへん、なんだかしっくりこないのですよね…。
いやまあ、今のPC or OSが、キーが押された/離された瞬間にイベントが発生する仕組みになってるから、ゲーム制作ライブラリもそのままになってるのかなと想像するのですが。ずっとPC上でゲーム作ってた人達は、「それのどこがいかんの?」「こんなの当たり前でしょ?」って感覚なのでしょうけど。
ただ…。例えば大昔のゲーム機って、そこらへんが逆だったんですよね。ジョイスティック(ゲームパッド/ジョイパッド)の、各ボタンのON/OFF状態のみをビット列で返してくる。押された瞬間や離された瞬間を知るためには、こっちでビット演算を、てな感じで。
つまり、世の中、キーのON/OFF状態しか返さない機器もあれば、変化のみをイベントで返す機器もあるわけで。 *1
だけど、ゲームを作る際には、
仕組みの違う機器がある。そして、最終的に欲しい情報は分かってる。だったら、そこはライブラリが吸収すべきじゃないのかなと思えてきたりもするわけで。
ゲームのルーチンを書く側が欲しいのは、「キーが押された」「キーが離された」「キーがずっと押されてる(or 押されていない)」という情報で。キー入力がイベントで処理されて云々とか、ビット列しか返さないとか、そんな知識が欲しいわけじゃないのですよ。でもまあ、そこを知ってないと本当に欲しい情報が得られないから、仕方なく把握して関連処理を書いてるわけですけど。
ちなみに、DXRuby は、その3つが取得できるので、使ってて便利なのです。キー入力周りを書くたびに、「ホント、気が利いてるよなあ…」と感心していたり。それに比べると、pysdl2 や gosu は、本来包むべき部分を包まないで、ライブラリの利用者側に丸投げしちゃってる印象が。何かこのあたり、「いやいや、そこはあえてそうしているのだよ。何故なら」的な、作者さんの思想でもあるのかしらん。
まあ、個人的に、あのへんなんだかしっくりこないんだよなあ、ってだけの話です。そんだけです。
ポエムでした。
pysdl2 もそうだし、gosu もそうだったと思うけど…。キーが押された瞬間、または離された瞬間にイベントが発生するから、キー入力の処理をしたいならそれらのイベントに対応した処理を書け、てな作りになっていて。
個人的に、そこらへん、なんだかしっくりこないのですよね…。
いやまあ、今のPC or OSが、キーが押された/離された瞬間にイベントが発生する仕組みになってるから、ゲーム制作ライブラリもそのままになってるのかなと想像するのですが。ずっとPC上でゲーム作ってた人達は、「それのどこがいかんの?」「こんなの当たり前でしょ?」って感覚なのでしょうけど。
ただ…。例えば大昔のゲーム機って、そこらへんが逆だったんですよね。ジョイスティック(ゲームパッド/ジョイパッド)の、各ボタンのON/OFF状態のみをビット列で返してくる。押された瞬間や離された瞬間を知るためには、こっちでビット演算を、てな感じで。
つまり、世の中、キーのON/OFF状態しか返さない機器もあれば、変化のみをイベントで返す機器もあるわけで。 *1
だけど、ゲームを作る際には、
- 「○○キーが押された瞬間か?」
- 「○○キーが離された瞬間か?」
- 「今、○○キーが押されてる状態か(押されてない状態か)」
仕組みの違う機器がある。そして、最終的に欲しい情報は分かってる。だったら、そこはライブラリが吸収すべきじゃないのかなと思えてきたりもするわけで。
ゲームのルーチンを書く側が欲しいのは、「キーが押された」「キーが離された」「キーがずっと押されてる(or 押されていない)」という情報で。キー入力がイベントで処理されて云々とか、ビット列しか返さないとか、そんな知識が欲しいわけじゃないのですよ。でもまあ、そこを知ってないと本当に欲しい情報が得られないから、仕方なく把握して関連処理を書いてるわけですけど。
ちなみに、DXRuby は、その3つが取得できるので、使ってて便利なのです。キー入力周りを書くたびに、「ホント、気が利いてるよなあ…」と感心していたり。それに比べると、pysdl2 や gosu は、本来包むべき部分を包まないで、ライブラリの利用者側に丸投げしちゃってる印象が。何かこのあたり、「いやいや、そこはあえてそうしているのだよ。何故なら」的な、作者さんの思想でもあるのかしらん。
まあ、個人的に、あのへんなんだかしっくりこないんだよなあ、ってだけの話です。そんだけです。
ポエムでした。
*1: そういえば、「キーが押された瞬間」しか分からない、富士通 FM-8/7 なんてPCもあったっけ…。プレイヤーキャラを動かしたら、移動を止めるためにテンキーの5を押さないといけないという…。ググってみたら、
_開発者は「このPCでゲーム作るヤツなんてまさか出てくるはずがない」と思ってた
らしいですな…。
[ ツッコむ ]
以上、1 日分です。