openFrameworks(0.10.0)でofxBox2Dを動かす
ofxBox2Dを動かしてみた。
環境
openFrameworks : 0.10.0
ofxBox2D : ofxBox2d/master (https://github.com/vanderlin/ofxBox2d)
VisualStudio : 2017
Windows 10
1. ofxBox2Dのインストール
ほかのサイトにもさんざん書かれているので省略しますが、GitHubからhttps://github.com/vanderlin/ofxBox2d
のマスターをダウンロードします。(openFrameworksのversionによってダウンロードするブランチが違うようなので注意)
その後、インストール済みのopenFrameworksのaddonフォルダに格納して準備完了。
2. ビルド
新規プロジェクトを作成して、適当なコードを書いてビルドをしてみる。
今回は、マウスクリックしたところに白いボールを生成して、cキーを押すとクリアするコードを書いた。
書いたコードは以下。
#pragma once
#include "ofMain.h"
#include "ofxBox2d.h"
#include <vector>
class ofApp : public ofBaseApp {
public:
void setup();
void update();
void draw();
void keyPressed(int key);
void keyReleased(int key);
void mouseMoved(int x, int y);
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void mouseEntered(int x, int y);
void mouseExited(int x, int y);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
ofxBox2d box2d; // box2dのインスタンス変数
std::vector<ofxBox2dCircle*> circles;
};
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup() {
ofBackground(0, 0, 0);
box2d.init();
box2d.setGravity(0, 9.8);
box2d.createBounds();
box2d.setFPS(30);
}
//--------------------------------------------------------------
void ofApp::update() {
box2d.update();
}
//--------------------------------------------------------------
void ofApp::draw() {
for (auto it = circles.begin(); it != circles.end(); ++it) {
ofSetColor(ofColor(255, 255, 255));
(*it)->draw();
}
}
//--------------------------------------------------------------
void ofApp::keyPressed(int key) {
if (key == 'c')
{
for (auto it = circles.begin(); it != circles.end();) {
(*it)->destroy();
delete *it;
it = circles.erase(it);
}
}
}
//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button) {
ofxBox2dCircle* circle = new ofxBox2dCircle();
circle->setPhysics(10.0, 0.8, 0);
circle->setup(box2d.getWorld(), x, y, 20);
circles.push_back(circle);
}
すると、以下のような旨のエラーがでる。
- ofDefaultVertexTypeが定義されてない
- ofRotateDegが定義されてない
いろいろ調べたんですが、あまり参考になる記事がなく、結局コードを漁ってくと、
どうにも、宣言している型名が変わってる模様。
以下のようにofDefaultVertexType ,ofRotateDeg が書かれてる部分をすべて修正したところ無事動いた。
- ofDefaultVertexType を ofPoint に修正
- ofRotateDeg を ofRotate に修正
Author And Source
この問題について(openFrameworks(0.10.0)でofxBox2Dを動かす), 我々は、より多くの情報をここで見つけました https://qiita.com/Tanutan93337836/items/4170e3616127b9fe0d69著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .