I'm teaching this sketch in my class. I understand most of the sketch and can see the class that makes the bird move, but I still don't quite understand how the code makes the sprite "move." I can also see what generates the Pipes but I don't how the code creates them or randomizes them.
Here is the code for both:
Bird
class Chym {
private:
int frameCount;
int x;
int y;
int deltaIde;
int delayFrame;
int jumpCount;
int maxJumpCount;
int moveSpeed;
bool _isDead;
public:
void respawn() {
x = 24;
y = 20;
deltaIde = -1;
moveSpeed = 1;
jumpCount = 0;
_isDead = false;
}
Chym() {
frameCount = 0;
delayFrame = 0;
maxJumpCount = 20;
respawn();
}
void render() {
if (frameCount < ANIM_FRAME / 2) {
display.drawBitmap(x, y, flappybird_frame_1, 16, 12, 1);
}
else {
display.drawBitmap(x, y, flappybird_frame_2, 16, 12, 1);
}
}
void update() {
delayFrame++;
if (delayFrame == DELAY_FRAME) {
y += deltaIde * moveSpeed;
delayFrame = 0;
}
if (y > 35) {
_isDead = true;
}
frameCount++;
if (frameCount >= ANIM_FRAME) frameCount = 0;
}
bool isDead() {
return _isDead;
}
void die() {
_isDead = true;
}
void cancelJump() {
jumpCount = 0;
flyDown();
}
void flyUp() {
if (jumpCount < maxJumpCount) {
deltaIde = -1;
moveSpeed = 3;
jumpCount++;
}
else {
flyDown();
}
}
void flyDown() {
deltaIde = 1;
moveSpeed = 1;
}
int getX() {
return x;
}
int getY() {
return y;
}
};
Pipe
class Bar {
private:
int x;
int y;
int delayFrame;
int moveSpeed;
public:
Bar() {
delayFrame = 0;
x = 0; y = 24;
moveSpeed = 2;
}
void setPos(int sx, int sy) {
x = sx; y = sy;
}
void render() {
display.drawBitmap(x, y - 30, bar_top, 8, 20, 1);
display.drawBitmap(x, y + 10, bar_bottom, 8, 20, 1);
}
void update() {
delayFrame++;
if (delayFrame == DELAY_FRAME) {
x -= moveSpeed;
if (x < -10) x = 95;
delayFrame = 0;
}
}
int hitTest(int tx, int ty) {
int hitX = ((tx >= x - 16) && (tx <= x))?1:0;
int hitY = ((ty <= (y - 10)) || (ty + 12 >= y + 10))?1:0;
if (hitX != 0) {
return hitY;
}
return 0;
}
};
1 Answer 1
This part of your code is what changes the sprite's y-value.
y += deltaIde * moveSpeed;
When you click the "jump" button or when the bird falls the y-value is changed to reflect either an upward movement or a downward movement. When your render()
method is called the bird will either be drawn higher up on the y-axis (it's flying) or lower on the y-axis (it's falling).
As for the bars, if you watch closely in the video you can see that they aren't actually randomized.
Compound Assignment Operators
+=
is the "plus assign" operator. It adds whatever is on the right side to the variable on the left side. Here is a table of other compound assignment operators: https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Compound_assignment_operators
int x = 5;
x += 2; // equals 7; equivalent to x = x + 2;
x = 5;
x = x + 2; // also equals 7; equivalent to x += 2;
-
What does the += mean?Gabe Ruiz– Gabe Ruiz2015年10月10日 03:37:27 +00:00Commented Oct 10, 2015 at 3:37
-
1@GabeRuiz, it was said in the same post:"x += 2; // equals 7; equivalent to x = x + 2;"Avamander– Avamander2015年10月10日 09:13:21 +00:00Commented Oct 10, 2015 at 9:13
-
2@Avamander if you'll notice the post was edited after my comment to include the answer to my second question, but thank you for pointing it out.Gabe Ruiz– Gabe Ruiz2015年10月10日 13:41:29 +00:00Commented Oct 10, 2015 at 13:41
-
1@Chris, thank you for the link. It has helped a lot.Gabe Ruiz– Gabe Ruiz2015年10月10日 13:44:53 +00:00Commented Oct 10, 2015 at 13:44