a-15 動き(1) スピードと向き
Sep 2, 2020
a-15 スピードと向き

1秒間に何回フレームが更新されるかを表すのがフレームレート。
void setup(){
frameRate(30);//毎秒30フレーム
//frameRate(24);//毎秒24フレーム
//frameRate(0.5);//2秒で1フレーム
}
void draw(){
printIn(frameRate);
}
off topic(余談)
動画のフレームレートは、「fps」で表します。
※fps = 1秒間に使用するフレーム数(コマ数)の静止画が記録されているか。
・24fps(23.98fps) 映画で採用。
・25fps PAL圏内(ヨーロッパなど)でテレビやDVDに採用。
・30fps(29.97fps) 日本国内やを含むNTSC圏内でテレビやDVDに採用。
・50fps PAL圏内(ヨーロッパなど)でテレビやDVDに採用。25fpsよりなめらか。
・60fps(59.94fps) 日本国内やを含むNTSC圏内でテレビやDVDに採用。30fpsよりなめらか。
フレームレートの数値が大きいほど被写体の動きがなめらかな動画となる。
高精度な動きを実現するのが、float型
なめらかな動きを表現するために、「float」という、データ型を使う。
int型では、フレームごとに少なくとも1ピクセル移動させないといけないが、float型の変数は、小数点を持つ数値を格納し、高精度な動きをさせる事ができる。

int radius=40;
float x =-radius;
float speed=0.5;
void setup(){
size(1280,120);
ellipseMode(RADIUS);
}
void draw(){
background(0);
x += speed;
arc(x,60,radius,radius,0.52,5.76);
fill(255,216,0);
}
上記のコードを実行すると、「x」がウィンドウ幅から出て行って見えなくなります。
ウィンドウ幅の端に達すると戻ってくる、コードは、こちら。
int radius=40;
float x =-radius;
float speed=0.5;
void setup(){
size(1280,120);
ellipseMode(RADIUS);
}
void draw(){
background(0);
x += speed;
if(x > width+radius){
x = -radius;
}
arc(x,60,radius,radius,0.52,5.76);
fill(255,216,0);
}
draw()が実行されるたびに、位置を表す変数xが増加し、xがウィンドウ幅に図形の半径を加えた値をこえたら、xに負の値をセットすることで、右出て左端からまた出てくる動きを表現する。
さらに、左端に到達後、向きを変えて戻ってくるコードは、こちら。
int radius=40;
float x =100;
float speed=5;
int direction =1;
void setup(){
size(1280,120);
ellipseMode(RADIUS);
}
void draw(){
background(0);
x += speed*direction;
if((x > width+radius)||(x < radius)){
direction = -direction;
}
if(direction ==1){
arc(x,60,radius,radius,0.52,5.76);
fill(255,216,0);
}else{
arc(x,60,radius,radius,3.67,8.9);
fill(255,216,0);
}
}





