1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RaspberryPiでopenFrameworksを使う~第2章

Last updated at Posted at 2018-06-19

  • インストール編
  • 簡単なアプリを作ってみる ←いまここ
  • RaspberryPiのGPIOも使ってみる(次回執筆予定)

#簡単なアプリを作ってみる
前章でインストールしたopenFrameworksを使って、早速、簡単なアプリを作って見ましょう。

##プロジェクトを作る
openFrameworksのプロジェクトを生成するために、projectGeneratorというツールが作られたのですが、残念ながらRaspberryPiの環境ではうまく動かないようなので、レガシーな方法でいきます。

プロジェクトは、openFrameworksの中のapps/myApps/に置きます。

cd ~/openFrameworks/apps/myApps
cp -r emptyExample hello_of
cd hello_of

これで、hello_ofという名前のプロジェクトができました。早速、プロジェクトディレクトリの中身を見てみましょう。

config.make ・・・・ビルドに必要な諸々の追加設定
emptyExample.png・・不要
Makefile・・・・・・所謂makeファイル
README.md ・・・・・不要
src ・・・・・・・・ソースファイルを置く場所
┣ main.cpp ・・・・main関数
┣ ofApp.cpp・・・・アプリの実装
┗ ofApp.h・・・・・ヘッダファイル

ソースファイルの類はすべてsrcディレクトリに入れれば、自動的に、コンパイル、リンクが行われます。

openFrameworksの基本

基本となるのはofApp.cppの中にあるたった三つのメソッドです。
flow.png
アプリ起動直後にofApp::setupが呼び出され、その後、ofApp::updateとofApp::drawが、画面の垂直同期のタイミングに合わせて繰り返し呼び出されます。

丸を描いてみる

src/ofApp.cppの中には、空のメソッドがすべて用意されているので、ここに書き足して、画面に丸を描いてみます。

src/ofApp.cpp
void ofApp::draw(){
    // 画面全体を黒く塗りつぶす
    ofClear(0, 0, 0);
    // 水色
    ofSetColor(0, 255, 255);
    // 塗りつぶし
    ofFill();
    // 円を描く
    ofDrawCircle(300, 300, 100);
}

ビルドして実行してみます。

make
cd bin
./hello_of

はい、できました。終了するにはCtrl+Cを押します。

IMAG3718.png

インタラクションな感じにしてみる

丸を描いただけではつまらないので、ちょっとインタラクションな感じにしてみましょう。

マウスやキーボードのイベントは、それぞれのコールバック関数で受け取ります。

ofApp::keyPressed ・・・キーボードが押された時
ofApp::keyReleased・・・キーボードが離された時
ofApp::mouseMoved ・・・マウスが動いた時
ofApp::mouseDragged ・・マウスがドラッグされた時
ofApp::mousePressed ・・マウスのボタンが押された時
ofApp::mouseReleased・・マウスのボタンが離された時

では実際にちょっと書いてみましょう。

src/ofApp.h
    private:
        float v, y;
src/ofApp.cpp
void ofApp::setup(){
    // 初期位置
    y = 100;
    v = 0;
}

void ofApp::update(){
    // 座標を更新
    v += 1;
    y += v;
    // 着地したら止まる
    int bottom = ofGetHeight()-100;
    if (y > bottom) {
        y = bottom;
        v = 0;
    }
}

void ofApp::draw(){
    ofClear(0, 0, 0);
    // 円を描く
    ofSetColor(0, 255, 255);
    ofFill();
    ofDrawCircle(300, y, 100);
}

void ofApp::keyPressed(int key){
    // スペースキーが押されたら跳ねる
    if (key == ' ') {
        v -= 50;
    }
}

スペースキーを押すと水色の丸がぴょんぴょんします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?