diff --git a/demo/src/main.c b/demo/src/main.c index 95331e2..7b363ff 100644 --- a/demo/src/main.c +++ b/demo/src/main.c @@ -1,7 +1,7 @@ #include -Sprite ball, brick1, brick2; +Sprite ball, brick1, brick2, brick3; Group edges; Group movement; Sound beep; @@ -11,45 +11,52 @@ void init() { spriteSetAnimation(ball, "data/sprite/breadball.png"); spriteSetColliderCircle(ball, 0, 0, -1); spriteSetRotateToDirection(ball, TRUE); - + brick1 = createSpriteEx(200-32, 200+64, 64, 64); spriteSetAnimation(brick1, "data/sprite/bricks.png"); spriteSetTintColor(brick1, rgb(0, 0, 1)); spriteSetColliderRectangle(brick1, 0, 0, 0, -1, -1, 20); spriteSetBounciness(brick1, 0.5); - + brick2 = createSpriteEx(200+32, 200+64, 64, 64); spriteSetAnimation(brick2, "data/sprite/bricks.png"); - spriteSetTintColor(brick2, rgba(1, 0, 1, 0.5)); spriteSetColliderRectangle(brick2, 0, 0, 0, -1, -1, 20); - + + brick3 = createSpriteEx(200+32+64, 200+64, 64, 64); + spriteSetAnimation(brick3, "data/sprite/bricks.png"); + spriteSetTintColor(brick3, rgba(1, 0, 1, 0.5)); + spriteSetColliderRectangle(brick3, 0, 0, 0, -1, -1, 20); + spriteSetBounciness(brick3, 2); + movement = createGroup(); groupAdd(movement, ball); - groupAdd(movement, brick1); groupAdd(movement, brick2); + edges = createEdgesGroup(); - + groupAdd(edges, brick1); + groupAdd(edges, brick3); + beep = createSound("data/sound/beep.ogg"); } void draw() { double dt = worldGetTimeStep(); double accel = 100; - + double vx = spriteGetVelocityX(ball); double vy = spriteGetVelocityY(ball); if (keyDown("left")) spriteSetVelocityX(ball, vx - accel*dt); if (keyDown("right")) spriteSetVelocityX(ball, vx + accel*dt); if (keyDown("up")) spriteSetVelocityY(ball, vy - accel*dt); if (keyDown("down")) spriteSetVelocityY(ball, vy + accel*dt); - + if (mouseWentDown("left")) soundPlay(beep, FALSE); - + groupCollideBetween(movement, 1); - groupPushGroup(edges, movement, 1); - + groupPushGroup(edges, movement, 0.9); + drawSprites(); - + point(mouseX(), mouseY()); } @@ -57,5 +64,5 @@ int main() { worldSetInit(&init); worldSetDraw(&draw); worldRun(); - return 0; + return 0; } diff --git a/src/drawing.c b/src/drawing.c index ba5e348..0a6fcb7 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -125,7 +125,7 @@ static void endPath(int close, int stroke, int fill) { static void pushPathPoint(double x, double y) { if (pathAllocated < pathSize + 2) { pathAllocated += pathAllocated/4 + 32; - path = realloc(path, pathAllocated); + path = realloc(path, pathAllocated*sizeof(*path)); memset(&path[pathSize], 0, (pathAllocated - pathSize)*sizeof(*path)); } path[pathSize++] = x; diff --git a/src/group.c b/src/group.c index 6abcd42..d443050 100644 --- a/src/group.c +++ b/src/group.c @@ -33,7 +33,7 @@ Group createEdgesGroupEx(double x1, double y1, double x2, double y2, double bord } Group createEdgesGroup() - { return createEdgesGroupEx(0, 0, worldGetWidth(), worldGetHeight(), 100); } + { return createEdgesGroupEx(0, 0, worldGetWidth(), worldGetHeight(), worldGetHeight()); } void groupDestroy(Group group) {