Ubuntu - Siv3D (original) (raw)

Getting Started with Siv3D Programming on Ubuntu

1. System Requirements

The development environment required for Siv3D programming on Ubuntu is as follows. The default version of GCC for your Ubuntu distribution should be used.

OS Ubuntu 20.04 LTS / Ubuntu 22.04 LTS
CPU Intel or AMD CPU
GPU OpenGL 4.1 support
Video Output Any video output device such as a monitor
Development Environment GCC 9.3.0 (+ Boost 1.71.0) / GCC 11.2 (+ Boost 1.74.0) / Clang 14.0.0 (+ Boost 1.74.0)

2. Get the Latest Siv3D Code

The main branch of the official OpenSiv3D repository contains the latest stable version. Clone the repository using "Code" > "Clone", or download the source code as a ZIP file ("Download ZIP").

3. Build Siv3D

  1. Install the required dependency packages by running the commands at this link:https://github.com/Siv3D/OpenSiv3D/blob/main/.github/workflows/ubuntu.yml#L22-L23
  2. Build the Siv3D library (libSiv3D.a) by running the commands at this link: https://github.com/Siv3D/OpenSiv3D/blob/main/.github/workflows/ubuntu.yml#L25-L34
  3. Install Siv3D by running the commands at this link: https://github.com/Siv3D/OpenSiv3D/blob/main/.github/workflows/ubuntu.yml#L36-L39
  4. Build a Siv3D app by running the commands at this link: https://github.com/Siv3D/OpenSiv3D/blob/main/.github/workflows/ubuntu.yml#L41-L50

4. Sample Program

The default Main.cpp code for the Linux version is a simple program that prints to standard output and exits immediately. Please replace its content with the sample code provided below. To exit the running program, press Esc or close the window.

Sample Code

[](#%5F%5Fcodelineno-0-1)# include <Siv3D.hpp> [](#%5F%5Fcodelineno-0-2) [](#%5F%5Fcodelineno-0-3)void Main() [](#%5F%5Fcodelineno-0-4){ [](#%5F%5Fcodelineno-0-5) // 背景の色を設定する | Set the background color [](#%5F%5Fcodelineno-0-6) Scene::SetBackground(ColorF{ 0.6, 0.8, 0.7 }); [](#%5F%5Fcodelineno-0-7) [](#%5F%5Fcodelineno-0-8) // 画像ファイルからテクスチャを作成する | Create a texture from an image file [](#%5F%5Fcodelineno-0-9) const Texture texture{ U"example/windmill.png" }; [](#%5F%5Fcodelineno-0-10) [](#%5F%5Fcodelineno-0-11) // 絵文字からテクスチャを作成する | Create a texture from an emoji [](#%5F%5Fcodelineno-0-12) const Texture emoji{ U"🦖"_emoji }; [](#%5F%5Fcodelineno-0-13) [](#%5F%5Fcodelineno-0-14) // 太文字のフォントを作成する | Create a bold font with MSDF method [](#%5F%5Fcodelineno-0-15) const Font font{ FontMethod::MSDF, 48, Typeface::Bold }; [](#%5F%5Fcodelineno-0-16) [](#%5F%5Fcodelineno-0-17) // テキストに含まれる絵文字のためのフォントを作成し、font に追加する | Create a font for emojis in text and add it to font as a fallback [](#%5F%5Fcodelineno-0-18) const Font emojiFont{ 48, Typeface::ColorEmoji }; [](#%5F%5Fcodelineno-0-19) font.addFallback(emojiFont); [](#%5F%5Fcodelineno-0-20) [](#%5F%5Fcodelineno-0-21) // ボタンを押した回数 | Number of button presses [](#%5F%5Fcodelineno-0-22) int32 count = 0; [](#%5F%5Fcodelineno-0-23) [](#%5F%5Fcodelineno-0-24) // チェックボックスの状態 | Checkbox state [](#%5F%5Fcodelineno-0-25) bool checked = false; [](#%5F%5Fcodelineno-0-26) [](#%5F%5Fcodelineno-0-27) // プレイヤーの移動スピード | Player's movement speed [](#%5F%5Fcodelineno-0-28) double speed = 200.0; [](#%5F%5Fcodelineno-0-29) [](#%5F%5Fcodelineno-0-30) // プレイヤーの X 座標 | Player's X position [](#%5F%5Fcodelineno-0-31) double playerPosX = 400; [](#%5F%5Fcodelineno-0-32) [](#%5F%5Fcodelineno-0-33) // プレイヤーが右を向いているか | Whether player is facing right [](#%5F%5Fcodelineno-0-34) bool isPlayerFacingRight = true; [](#%5F%5Fcodelineno-0-35) [](#%5F%5Fcodelineno-0-36) while (System::Update()) [](#%5F%5Fcodelineno-0-37) { [](#%5F%5Fcodelineno-0-38) // テクスチャを描く | Draw the texture [](#%5F%5Fcodelineno-0-39) texture.draw(20, 20); [](#%5F%5Fcodelineno-0-40) [](#%5F%5Fcodelineno-0-41) // テキストを描く | Draw text [](#%5F%5Fcodelineno-0-42) font(U"Hello, Siv3D!🎮").draw(64, Vec2{ 20, 340 }, ColorF{ 0.2, 0.4, 0.8 }); [](#%5F%5Fcodelineno-0-43) [](#%5F%5Fcodelineno-0-44) // 指定した範囲内にテキストを描く | Draw text within a specified area [](#%5F%5Fcodelineno-0-45) font(U"Siv3D (シブスリーディー) は、ゲームやアプリを楽しく簡単な C++ コードで開発できるフレームワークです。") [](#%5F%5Fcodelineno-0-46) .draw(18, Rect{ 20, 430, 480, 200 }, Palette::Black); [](#%5F%5Fcodelineno-0-47) [](#%5F%5Fcodelineno-0-48) // 長方形を描く | Draw a rectangle [](#%5F%5Fcodelineno-0-49) Rect{ 540, 20, 80, 80 }.draw(); [](#%5F%5Fcodelineno-0-50) [](#%5F%5Fcodelineno-0-51) // 角丸長方形を描く | Draw a rounded rectangle [](#%5F%5Fcodelineno-0-52) RoundRect{ 680, 20, 80, 200, 20 }.draw(ColorF{ 0.0, 0.4, 0.6 }); [](#%5F%5Fcodelineno-0-53) [](#%5F%5Fcodelineno-0-54) // 円を描く | Draw a circle [](#%5F%5Fcodelineno-0-55) Circle{ 580, 180, 40 }.draw(Palette::Seagreen); [](#%5F%5Fcodelineno-0-56) [](#%5F%5Fcodelineno-0-57) // 矢印を描く | Draw an arrow [](#%5F%5Fcodelineno-0-58) Line{ 540, 330, 760, 260 }.drawArrow(8, SizeF{ 20, 20 }, ColorF{ 0.4 }); [](#%5F%5Fcodelineno-0-59) [](#%5F%5Fcodelineno-0-60) // 半透明の円を描く | Draw a semi-transparent circle [](#%5F%5Fcodelineno-0-61) Circle{ Cursor::Pos(), 40 }.draw(ColorF{ 1.0, 0.0, 0.0, 0.5 }); [](#%5F%5Fcodelineno-0-62) [](#%5F%5Fcodelineno-0-63) // ボタン | Button [](#%5F%5Fcodelineno-0-64) if (SimpleGUI::Button(U"count: {}"_fmt(count), Vec2{ 520, 370 }, 120, (checked == false))) [](#%5F%5Fcodelineno-0-65) { [](#%5F%5Fcodelineno-0-66) // カウントを増やす | Increase the count [](#%5F%5Fcodelineno-0-67) ++count; [](#%5F%5Fcodelineno-0-68) } [](#%5F%5Fcodelineno-0-69) [](#%5F%5Fcodelineno-0-70) // チェックボックス | Checkbox [](#%5F%5Fcodelineno-0-71) SimpleGUI::CheckBox(checked, U"Lock \U000F033E", Vec2{ 660, 370 }, 120); [](#%5F%5Fcodelineno-0-72) [](#%5F%5Fcodelineno-0-73) // スライダー | Slider [](#%5F%5Fcodelineno-0-74) SimpleGUI::Slider(U"speed: {:.1f}"_fmt(speed), speed, 100, 400, Vec2{ 520, 420 }, 140, 120); [](#%5F%5Fcodelineno-0-75) [](#%5F%5Fcodelineno-0-76) // 左キーが押されていたら | If left key is pressed [](#%5F%5Fcodelineno-0-77) if (KeyLeft.pressed()) [](#%5F%5Fcodelineno-0-78) { [](#%5F%5Fcodelineno-0-79) // プレイヤーが左に移動する | Player moves left [](#%5F%5Fcodelineno-0-80) playerPosX = Max((playerPosX - speed * Scene::DeltaTime()), 60.0); [](#%5F%5Fcodelineno-0-81) isPlayerFacingRight = false; [](#%5F%5Fcodelineno-0-82) } [](#%5F%5Fcodelineno-0-83) [](#%5F%5Fcodelineno-0-84) // 右キーが押されていたら | If right key is pressed [](#%5F%5Fcodelineno-0-85) if (KeyRight.pressed()) [](#%5F%5Fcodelineno-0-86) { [](#%5F%5Fcodelineno-0-87) // プレイヤーが右に移動する | Player moves right [](#%5F%5Fcodelineno-0-88) playerPosX = Min((playerPosX + speed * Scene::DeltaTime()), 740.0); [](#%5F%5Fcodelineno-0-89) isPlayerFacingRight = true; [](#%5F%5Fcodelineno-0-90) } [](#%5F%5Fcodelineno-0-91) [](#%5F%5Fcodelineno-0-92) // プレイヤーを描く | Draw the player [](#%5F%5Fcodelineno-0-93) emoji.scaled(0.75).mirrored(isPlayerFacingRight).drawAt(playerPosX, 540); [](#%5F%5Fcodelineno-0-94) } [](#%5F%5Fcodelineno-0-95)}