読者です 読者をやめる 読者になる 読者になる

Flat Leon Works

アプリやゲームを作ってます。

Flat Leon Works

Flat Leon Works は shinya の個人サイトです。 制作物 iOS用音楽再生アプリ「うさプレイヤ」 制作中 【開発中】2Dアクション「センメツコースター(仮)」 2016:08:18 20-37 from shinya on Vimeo. サイトマップ サイト概要など このサイトについて 近況 うさ…

Gitリポジトリの統計情報を見るためにGitStatsを使ってみる(Macで)

プログラミングをしていてソースコードの行数が一体どれくらいになっているのか気になることがよくあるのですが、Gitリポジトリを解析して統計情報を生成してくれるGitStatsというツールがあることを知りました。ソースコード行数はもちろん、ファイル数、コ…

Xcode7.3へのアップデート後、C++プロジェクトのビルド時間が異様に長くなる問題への対処

Xcode7.3へアップデート後、QtCreatorのC++プロジェクトのビルド時のリンク時間がやたら遅いなと思っていましたが解決法が書かれたページを見つけ、試してみたところ治ったので共有したいと思います。 ※Xcode自体でのビルドではなく、Xcode付属のClangを使っ…

【開発中】2Dアクション「センメツコースター(仮)」

2016年4月から「センメツコースター(仮)」というiOS用のゲームを作っています。 2016:08:18 20-37 from shinya on Vimeo. ジェットコースター+アクションゲームな感じです。 最初は1ヶ月で完成させることを目標にしていましたが、4ヶ月も経ってしまいました…

Macで60fpsの画面キャプチャGIF動画を作成する方法

Mac

普段、MacでのGif動画用の画面キャプチャはLICEcapというソフトを使っていますが、このソフトで画面キャプチャを行うとフレームレートが30fpsくらいになってしまいます。たいていは30fpsもあれば十分なのですが、ゲームの動画など60fpsにしたい場合もありま…

【ゲームプログラミング】ビット演算による点滅処理

ゲームプログラミングキャラクターを点滅させたいとき、以下のような実装にするかもしれません。 // C++ class Player { int m_DrawCount; public: Player() : m_DrawCount( 0 ){} void Draw( void ) { // 2フレームに1回描画 if ( m_DrawCount % 2 == 0 ) {…

【C++ アイデア】関数内でメンバ変数を定義する

C++

メンバ関数の中でメンバ変数の定義ができたら便利だろうなと思ったので、方法を模索してみました。半分ネタです。 やりたいのはこういう感じのことです。 class A { int m_Value; // こっちは普通のメンバ変数 public: void Func( void ) { local int m_Stat…

【メモ】気になるツールなど

そのうち試してみたいツールなどを忘れないようにメモ。 プログラム系 プログラミング言語 JavaScript : Webサイトだけでなくいろいろな場面で使われてるので覚えておいて損はなさそう。 Nim : インデント構文、静的型、強力なマクロ、そしてC言語コードを生…

【Lua組み込み】Luaスクリプトのファイル分割を独自のファイルロード処理で行う方法

Lua

require関数やdofile関数のファイルロード処理はカスタマイズできない Luaスクリプトを書いていてファイル分割をしたくなった場合、Lua標準のrequire関数やdofile関数を使うと思います。 dofile( 'common.lua' ) dofile( 'util.lua' ) -- いろんな処理 問題…

Macでフォルダアイコンの色を変更する方法とGitの罠

Mac

Macで作業をしていて、ふとフォルダアイコンの色を変えたくなりました。調べてみたところ、Mac標準の機能だけでできることがわかったので紹介したいと思います。また、この方法はGitでちょっと問題がでるのでその対処法も紹介します。 フォルダアイコン色の…

Pillow(Python画像処理ライブラリ)でRGBAパレット形式のTGAファイルを保存する

PillowはPythonの画像処理ライブラリです。PillowはTGAファイルに対応しているのですが、RGBAパレット形式のTGAファイルの保存ができなかったのでソースコードをいじって対応させてみました。 ちなみにRGB形式のパレットには最初から対応されていました。 注…

ゲームにおけるタッチスクリーンの問題点

タッチスクリーンの問題点はタイミングではない モバイルのタッチスクリーンがゲームのコントロールとして最悪である理由を解明した研究論文、フィンランドの大学から | TechCrunch Japan 上記の記事ではタッチスクリーンの問題点としてタイミングが不定であ…

【Python】コマンドライン引数を解析する(argparseの利用)

Python2.7を対象とします。 コマンドライン引数の解析 argparseを利用する 逆引きリファレンス コマンドライン引数を指定して解析する 位置引数を追加する オプション引数を追加する オプション引数にデフォルト値を設定する 引数を文字列以外で受け取る(変…

【Python】リストからタプルのリストを作成する

Pythonでリストからタプルのリストを作りたい場合、例えば[1,2,3,4,5,6]というリストがあって、これを[(1,2),(3.4),(5,6)]のようなタプルのリストにしたい場合は以下のように書くのが楽です。 listA = [1,2,3,4,5,6] listB = zip( listA[::2], listA[1::2] )…

【Python】個人的逆引きリファレンス

Pythonでの個人的によく書くコードを逆引きリファレンスとしてまとめておこうと思います。(随時更新) 注意: Python2.7を対象としてます Pythonに詳しいわけではないので変な書き方をしているかもしれません 動作確認してません ファイル ファイルの存在チェ…

OpenGLメモ

リンク 公式 The Khronos Group Inc.OpenGLの総本山 OpenGL ES - The Standard for Embedded Accelerated 3D Graphics OpenGL ES 2.0 Reference Pages : APIリファレンス Appleドキュメント iOS用OpenGL ESプログラミングガイド (TP40008793 0.0.0) - OpenGL…

【C++】宣言と定義の早見表

宣言と定義の早見表 宣言だけの書き方は忘れがちなので早見表を作ってみました。 注意 : 一応コンパイルが通ることを確認していますが、もしかしたら間違った書き方をしているかもしれません。 宣言のみ定義(宣言を含む場合あり)備考 グローバル変数extern i…

ALURE(OpenALユーティリティ)をiOSで使う

クロスプラットフォームなゲーム開発で音を鳴らすにはOpenALが定番っぽいです。Mac、Windows、iOS、Androidで利用可能だそうで。しかしOpenALだけではwavファイルなどの音声ファイルを扱うことができません。そこで良さげなのがOpenALのユーティリティライブ…

【C++】個別に未使用変数の警告を抑制する方法

未使用変数の警告 C++はコンパイル時のオプションにより未使用変数の警告が出る場合があります。未使用変数というのはその名の通り、宣言したのに使っていない変数のことです。この未使用変数の警告が一番出やすいのは関数の仮引数の変数です。特に仮想関数…

扱う文字コードに迷ったらUTF-8を選ぼう

文字コードを決める場面 プログラミングにおいて文字コードを考えるときは、APIやファイルフォーマットなどですでに決められた文字コードに自分が合わせる場合がほとんどだと思います。しかし、自分で文字コードを決める場面というのも少なからず存在します…

【C++ アイデア】戻り値をチェックするアサート

アサートの罠 アサートは便利なものですが、油断するとこんなコードを書いてしまうかもしれません。 #include <stdio.h> #include <assert.h> class A { int m_Value; public: A() : m_Value( 0 ){} // 値をセットします。戻り値はセットする前の値です。 int setValue( int val</assert.h></stdio.h>…

プログラミングを学ぶこつ

プログラミングを学ぶこつは「慣れ」と「模索」 プログラミングにはいくつもの壁があります。この壁の多さから挫折してしまうひとが沢山いるようです。自分がプログラミングを学んできて思うのは、プログラミングの学習で重要なのは「慣れ」と「模索」なので…

各種プログラミング言語の動作確認に便利なIdeone

プログラミング言語の動作が気になったときに プログラミングをしていて、プログラミング言語の動作を確認したくなったことはありませんか。例えば、C++で複数の変数を一度に初期化したいと考えたとします。そして確かこんな書き方ができたはずと、int a, b …

オブジェクト指向プログラミングでのクラス分けのコツは役割分担

役割分担でクラス化していく 役割を決めることで実装すべきものと実装すべきでないものが明確になる クラス名が役割を表すことになる 動作も役割分担の対象になる 役割を詳細に決めすぎる必要はない 役割分担でクラス化するかどうかは複雑さで考える 役割分…

オブジェクト指向とは何なのか考えてみた

オブジェクト指向の概要 オブジェクト指向の位置づけ 命令型から手続き型へ、そしてオブジェクト指向へ オブジェクト指向+αでメリットが出てくる (おまけ)良質なプログラミングとは何か まとめ オブジェクト指向とは何なのか考え抜いてみました。 オブジェク…

【C++ ゲームプログラミング】タスクシステムの発展形

タスクが親子関係を持てるようにする タスクの親子関係で座標を相対的にする イベント伝搬の仕組みを導入する メッセージ送受信の仕組みを導入する 弱参照の仕組み タスクシステムという名前も発展させる まとめ 前回「タスクシステムからの脱却を考える」と…

【C++ ゲームプログラミング】タスクシステムからの脱却を考える

タスクシステムのメリット タスクシステムの問題点 タスクシステム不要論 タスクシステムが生まれた背景 タスクシステムがまだ有効な場面 小規模なゲーム 気合と根性がある場合 タスクシステムを大局的に使う場合 まとめ タスクシステムのメリット タスクシ…

【C++ ゲームプログラミング】STLで実装する最小のタスクシステム

タスクシステムとは 実装例 まとめ タスクシステムとは タスクシステムとはゲームプログラミングで利用されるプログラムの設計のことです。ゲームプログラムは更新処理と描画処理を繰り返すことで動作します。この更新処理と描画処理を小さな単位(タスク)に…

【C++ イディオム】メソッドチェイン + 引数のクラス化 = 名前付きパラメータイディオム

メソッドチェインと引数のクラス化 メソッドチェインとは 引数のクラス化 引数のクラス化とメソッドチェインを組み合わせる まとめ メソッドチェインと引数のクラス化 「メソッドチェイン」はメソッド(メンバ関数)を連続で呼び出す手法です。「引数のクラス…

【C++】メンバ関数には必要に応じてconstをつけよう

constメンバ関数 constメンバ関数のメリット constメンバ関数の使いどころ constメンバ関数内でもメンバ変数を変更したい場合 constメンバ関数の注意点 constメンバ関数のオーバーロード constメンバ関数を使うかどうかでソースコード全部に影響がでる const…

【C++】classとstructの違い

C++にはメンバを持てる存在が3つ存在します。それはclassとstructとunionです。unionはちょっと特殊なので置いておいて、classとstructにはどんな違いがあるのでしょうか。 違いはデフォルトのアクセス指定子のみ 実はclassとstructの違いはデフォルトのアク…

【C++ 小ネタ】文字列定数いろいろ

文字列定数とは 並んだ文字列定数は自動で連結される マクロ関数の引数を文字列化する 複数行の文字列定数を記述する 文字列定数とは "foo" ←これのことです。文字列リテラルとも呼ばれます。 並んだ文字列定数は自動で連結される 複数並んだ文字列定数は、…

【C++】短絡評価(ショートサーキット)を知ろう

短絡評価とは 短絡評価の例 なぜ短絡評価が存在するのか 短絡評価の使い道 ポインタと合わせて使う 軽い処理を先に持ってくる 短絡評価の注意点 まとめ 短絡評価とは 短絡評価とは論理演算子&&と||で行われる、式の評価の省略のことです。ショートサーキット…

【C++ 小ネタ】delete演算子とfree関数はNULLチェックは不要

delete演算子とfree関数はNULLチェックは不要 delete演算子とfree関数は、NULLを渡した場合、何も処理が行われないことが保証されています。なので以下のようなコードは、 if ( p ) { delete p; } このようにシンプルに書くことができます。 delete p; mallo…

【C++】条件演算子いろいろ

条件演算子のメリット 条件演算子の使いどころ 条件演算子ではなくif文を使うべきところ 条件演算子を入れ子にする 条件演算子の注意点 演算子の優先順序に気をつける 結果の型は同じである必要がある 三項演算子という呼び方 まとめ 条件演算子のメリット …

【C++ アイデア】const_castをちょっと楽にする

const_castはちょっと手間 const_on / const_off 関数を作る 使い方 まとめ const_castはちょっと手間 const_castはconstを付けたり外したりするためのキャストなのですが、ちょっと記述が面倒です。 class PlayerCharacter{}; const PlayerCharacter player…

【C++ イディオム】Pimplイディオムを使って真のprivateを実現する

privateが見えちゃってる問題 Pimplイディオムとは Pimplイディオムのメリット Pimplイディオムのデメリット プライベートクラスを一部に公開する Pimplイディオムを使う場面 Pimplイディオムの注意点 まとめ 参考リンク privateが見えちゃってる問題 C++の…

【C++】クラスの前方宣言いろいろ

クラスの前方宣言とは クラスの前方宣言の用途 ヘッダーでの別のヘッダのインクルードを減らす 相互参照を実現する クラスの前方宣言とポインタ変数の宣言を同時に行う クラス内でそのクラスの内部クラスの前方宣言 内部クラスの前方宣言にはクラスの定義が…

【C++ アイデア】ファイルのフォルダ分けをしつつ、ヘッダのインクルードを楽にする

ファイルのフォルダ分けをすると#includeが面倒になる問題 ファイルをフォルダ分けしたことによる問題 ファイルを移動したことによる問題 解決法?1: フォルダ分けを諦める 解決法?2: 楽に#includeをするのを諦める 解決法3: インクルードパスを設定する 解…

【C++ 小ネタ】ポインタ変数の初期化はif文の条件式で行うと一石三鳥

関数の戻り値やdynamic_cast結果のポインタはNULLの可能性があります。そしてNULLポインタへのアクセスはプログラムをクラッシュさせたりします。 Hoge* p_hoge = GetHoge(); p_hoge->SetValue( 4 ); // p_hogeがNULLだとアウト 当然、if文でNULLチェックを…

【C++】プリプロセッサの基礎(マクロ編)

マクロとは マクロの役割 マクロを定義する 定数マクロの例 関数マクロの例 定義したマクロを削除する #ifでマクロが定義されているかどうかを利用する 組み込みマクロ 可変個引数のマクロ マクロ引数の文字列定数化 マクロ引数の連結 複数行に渡るマクロ定…

【C++ 小ネタ】ブロック文を活用する

ブロック文とは C++にはブロック文というものが存在します。ブロック、あるいは複合文とも呼ばれます。 // これがブロック文 { // ここはブロックスコープとなる } ブロック文はスコープを作り出すだけで、特に意味のない存在のように見えますが、実は結構便…

当サイトのC++記事の基本方針

C++

当サイトが公開するC++記事の注意点と基本的な方針を説明します。 注意点 C++と記述した場合、C++03を指します。 C言語に該当する話題や機能でもC++のものとして扱います。ブログ記事のカテゴリーもC++としています。 ブログ記事はC++11以降について考慮しま…

iOS有料アプリ「うさプレイヤ」の1年目の売上を公開します

初めて作ったiOS有料アプリ「うさプレイヤ」をリリースしてから約1年経ちました(2015年1月23日にリリース)。せっかくなので振り返りを兼ねて売上を公開したいと思います。有料アプリの売上ってあまり見たことがないので貴重かもしれません。 ( 目次 ) アプリ…

GLFWをMac環境で動かすとウインドウが表示されてないときのみCPU使用率が異様に高くなる場合がある

Mac環境でGLFWを使ったプログラムを書いていて気付いたのですが、ウインドウが表示されていないときのみCPU使用率が異様に高くなります。ちょっと調べてみたところ、glfwSwapBuffers でvsync(垂直同期)が発生しなくなってるのがわかりました。つまり、ウイン…

近況

2016/02/02 うさプレイヤのバージョンアップようやく完了。 ゲームの効果音を作るためにChucKを使おうとするも、やはりGUIじゃなきゃダメだということでGUIアプリを制作中。 2015/10/02 貯金を切り崩しながら生活中。あと半年くらいでなくなりそう。 うさプ…

SwordGirl(仮)の開発状況

一応、見た目でわかる部分の進捗は Vimeo に動画を上げています。(最近さぼりがち) ※現在開発中断してます 完成度 : 10% (2016/04) 2015/04 開発開始 プレイヤーキャラデザインを考える Asepriteを使いはじめる。棒人間でアニメーションを作ってみる 2015/05…

SwordGirl(仮)の開発環境

普段はゲームプレイを含めMac上で作業していて、たまに操作感の確認などのためにiOSで動かしています。 ※今のところ配布はiOS版のみを考えています。 OS : MacOSX プログラム プログラム言語 : C++ 描画ライブラリ : OpenGL(Mac) / OpenGLES(iOS) サウンドラ…

はてなブログ(無料版)でLightboxとbxSliderを利用する

はてなブログを使って運用している「うさプレイヤ公式サイト」にLightboxとbxSliderを導入してみたので、そのときのメモ。 補足 はてなブログとは別にファイルをアップロードする場所も必要になります。 私はGoogleドライブに置くようにしてます(2016/08/10 …

横スクロールアクションRPG「SwordGirl(仮)」を開発中

横スクロールアクションRPG「SwordGirl(仮)」とは 普通の2D横スクロールアクションを作りたい。— shinya@iOS音楽再生アプリ配信中 (@flat_leon) April 8, 2015 というわけで、shinyaが個人で作っているゲームです。今のところiOS向けに作っています。 開発環…