Adding texture/background_scrolling example (#91)

Adding textures_background_scrolling example

Signed-off-by: Sebastian Lukas <sisasebbl@googlemail.com>
This commit is contained in:
Sebastian Lukas 2024-05-20 20:38:22 +02:00 committed by GitHub
parent 9abd48b147
commit b5330624d6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 129 additions and 1 deletions

View File

@ -223,6 +223,11 @@ pub fn build(b: *std.Build) !void {
.path = "examples/textures/sprite_anim.zig", .path = "examples/textures/sprite_anim.zig",
.desc = "Animate a sprite", .desc = "Animate a sprite",
}, },
.{
.name = "textures_background_scrolling",
.path = "examples/textures/textures_background_scrolling.zig",
.desc = "Background scrolling & parallax demo",
},
// .{ // .{
// .name = "models_loading", // .name = "models_loading",
// .path = "examples/models/models_loading.zig", // .path = "examples/models/models_loading.zig",

View File

@ -0,0 +1,123 @@
//! # raylib-zig [textures] example - background scrolling
//!
//! Example licensed under an unmodified zlib/libpng license, which is an
//! OSI-certified, BSD-like license that allows static linking with closed
//! source software
//!
//! Copyright (c) Nikolas Wipper 2024
const rl = @import("raylib");
const screen_width = 800;
const screen_height = 450;
pub fn main() anyerror!void {
// Initialization
//--------------------------------------------------------------------------------------
rl.initWindow(screen_width, screen_height, "raylib [textures] example - background scrolling");
defer rl.closeWindow(); // Close window and OpenGL context
// NOTE: Be careful, background width must be equal or bigger than screen width
// if not, texture should be draw more than two times for scrolling effect
const background = rl.loadTexture("resources/textures/cyberpunk_street_background.png");
const midground = rl.loadTexture("resources/textures/cyberpunk_street_midground.png");
const foreground = rl.loadTexture("resources/textures/cyberpunk_street_foreground.png");
defer rl.unloadTexture(background); // Unload background texture
defer rl.unloadTexture(midground); // Unload midground texture
defer rl.unloadTexture(foreground); // Unload foreground texture
var scrolling_back: f32 = 0;
var scrolling_mid: f32 = 0;
var scrolling_fore: f32 = 0;
rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!rl.windowShouldClose()) { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
scrolling_back -= 0.1;
scrolling_mid -= 0.5;
scrolling_fore -= 1.0;
// NOTE: Texture is scaled twice its size, so it sould be considered on scrolling
if (scrolling_back <= @as(f32, @floatFromInt(-background.width * 2))) scrolling_back = 0;
if (scrolling_mid <= @as(f32, @floatFromInt(-midground.width * 2))) scrolling_mid = 0;
if (scrolling_fore <= @as(f32, @floatFromInt(-foreground.width * 2))) scrolling_fore = 0;
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
{
rl.beginDrawing();
defer rl.endDrawing();
rl.clearBackground(rl.getColor(0x052c46ff));
// Draw background image twice
// NOTE: Texture is scaled twice its size
rl.drawTextureEx(
background,
rl.Vector2.init(scrolling_back, 20.0),
0.0,
2.0,
rl.Color.white,
);
rl.drawTextureEx(
background,
rl.Vector2.init(@as(f32, @floatFromInt(background.width * 2)) + scrolling_back, 20),
0.0,
2.0,
rl.Color.white,
);
// Draw midground image twice
rl.drawTextureEx(
midground,
rl.Vector2.init(scrolling_mid, 20.0),
0.0,
2.0,
rl.Color.white,
);
rl.drawTextureEx(
midground,
rl.Vector2.init(@as(f32, @floatFromInt(midground.width * 2)) + scrolling_mid, 20),
0.0,
2.0,
rl.Color.white,
);
// Draw foreground image twice
rl.drawTextureEx(
foreground,
rl.Vector2.init(scrolling_fore, 70.0),
0.0,
2.0,
rl.Color.white,
);
rl.drawTextureEx(
foreground,
rl.Vector2.init(@as(f32, @floatFromInt(foreground.width * 2)) + scrolling_fore, 70),
0.0,
2.0,
rl.Color.white,
);
rl.drawText(
"BACKGROUND SCROLLING & PARALLAX",
10,
10,
20,
rl.Color.red,
);
rl.drawText(
"(c) Cyberpunk Street Environment by Luis Zuno (@ansimuz)",
screen_width - 330,
screen_height - 20,
10,
rl.Color.ray_white,
);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB