JSONオブジェクトを使って、関連するデータをまとめて管理します。
p5.js oop
Learning OOP Object Oriented Programming
ここから改善の第一歩!JSONオブジェクトを使ってデータを整理します。
改善点: データのまとまり
let obj = {
x: random(width),
y: random(height),
xSpeed: ...,
ySpeed: ...,
acceleration: 0.1,
};1つのキャラの情報が1つのオブジェクトにまとまりました。
変数ベースとの比較
| 変数ベース | オブジェクトベース |
|---|---|
x, y, xSpeed... |
obj.x, obj.y, obj.xSpeed... |
| 関連が分かりにくい | 1つのキャラとして認識できる |
オブジェクト(JSON)の良さ
- 関連するデータを1つにまとめられる
obj.プロパティ名でアクセスでき、可読性が高い- データ構造が明確になる
でも、これで問題は解決したのでしょうか?次の202で確認してみましょう。
View Source Code
let W, H, PW, PH
const PADDING_RATIO = 0.2
const MAX_SPEED = 10
let obj;
function prepare() {
obj = {
x: random(width),
y: random(height),
xSpeed: (Math.random() - 0.5) * MAX_SPEED,
ySpeed: (Math.random() - 0.5) * MAX_SPEED,
acceleration: 0.1,
};
}
function update() {
obj.x += obj.xSpeed;
obj.y += obj.ySpeed;
if (obj.x < 0 + PW) {
obj.xSpeed += obj.acceleration;
} else if (obj.x > W - PW) {
obj.xSpeed -= obj.acceleration;
}
if (obj.y < 0 + PH) {
obj.ySpeed += obj.acceleration;
} else if (obj.y > H - PH) {
obj.ySpeed -= obj.acceleration;
}
}
function display() {
stroke(0);
fill(0);
ellipse(obj.x, obj.y, 10, 10);
text(["1:", Math.floor(obj.x), Math.floor(obj.y)], obj.x + 10, obj.y + 10);
}
// main
function setup() {
createCanvas(W = windowWidth, H = windowHeight);
PW = W * PADDING_RATIO
PH = H * PADDING_RATIO
prepare();
}
function draw() {
background(255);
update();
display();
}