Vienti

Yleiskatsaus

Nyt kun sinulla on toimiva peli, haluat todennäköisesti jakaa onnistumisesi muiden kanssa. Ei ole kuitenkaan käytännöllistä pyytää ystäviäsi lataamaan Godotia, vain jotta he voisivat avata projektisi. Voit sen sijaan viedä projektisi, muuntamalla sen ”paketiksi”, jonka kuka tahansa voi ajaa.

Tapa, jolla viet pelisi, riippuu kohdealustasta. Tässä oppaassa opit, kuinka viedä ”Dodge the Creeps” peli useille eri alustoille. Ensin meidän täytyy kuitenkin tehdä joitakin muutoksia pelin toimintatapaan.

Muista

Jos et ole vielä tehnyt ”Dodge the Creeps” peliä itse, ole hyvä ja lue Ensimmäinen pelisi ennen kuin jatkat tämän ohjeen parissa.

Projektin valmistelu

”Dodge the Creeps” pelissä käytämme näppäimistöohjausta pelaajan hahmon liikkuttamiseksi. Tämä on sopivaa, jos peliäsi pelataan PC-alustalla, mutta puhelinta tai tablettia varten sinun täytyy tukea kosketusnäytön syötteitä. Koska hiiren napsautusta voidaan käsitellä samalla tavalla kuin kosketusta, muunnamme pelin napsauta-ja-liiku tyyliselle syötteelle.

By default Godot emulates mouse input from touch input. That means if anything is coded to happen on a mouse event, touch will trigger it as well. Godot can also emulate touch input from mouse clicks, which we will need to be able to keep playing our game on our computer after we switch to touch input. In the ”Project Settings” under Input Devices and Pointing, set Emulate Touch From Mouse to ”On”.

../../_images/export_touchsettings.png

We also want to ensure that the game scales consistently on different-sized screens, so in the project settings go to Display, then click on Window. In the Stretch options, set Mode to ”2d” and Aspect to ”keep”.

Since we are already in the Window settings, we should also set under Handheld the Orientation to ”portrait”.

../../_images/export_handheld_stretchsettings.png

Seuraavaksi meidän täytyy muokata Player.gd skriptiä muuttaaksemme syötemenetelmää. Poistamme näppäimistösyötteet ja laitamme pelaajan liikkumaan kohti ”kohdetta”, joka asetetaan kosketuksella (tai hiiren näpäytyksellä).

Tässä koko skripti pelaajalle, muutokset kommenteihin merkittynä:

extends Area2D

signal hit

export var speed = 400
var screen_size
# Add this variable to hold the clicked position.
var target = Vector2()

func _ready():
    hide()
    screen_size = get_viewport_rect().size

func start(pos):
    position = pos
    # Initial target is the start position.
    target = pos
    show()
    $CollisionShape2D.disabled = false

# Change the target whenever a touch event happens.
func _input(event):
    if event is InputEventScreenTouch and event.pressed:
        target = event.position

func _process(delta):
    var velocity = Vector2()
    # Move towards the target and stop when close.
    if position.distance_to(target) > 10:
        velocity = (target - position).normalized() * speed
    else:
        velocity = Vector2()

# Remove keyboard controls.
#    if Input.is_action_pressed("ui_right"):
#       velocity.x += 1
#    if Input.is_action_pressed("ui_left"):
#        velocity.x -= 1
#    if Input.is_action_pressed("ui_down"):
#        velocity.y += 1
#    if Input.is_action_pressed("ui_up"):
#        velocity.y -= 1

    if velocity.length() > 0:
        velocity = velocity.normalized() * speed
        $AnimatedSprite.play()
    else:
        $AnimatedSprite.stop()

    position += velocity * delta
    # We still need to clamp the player's position here because on devices that don't
    # match your game's aspect ratio, Godot will try to maintain it as much as possible
    # by creating black borders, if necessary.
    # Without clamp(), the player would be able to move under those borders.
    position.x = clamp(position.x, 0, screen_size.x)
    position.y = clamp(position.y, 0, screen_size.y)

    if velocity.x != 0:
        $AnimatedSprite.animation = "right"
        $AnimatedSprite.flip_v = false
        $AnimatedSprite.flip_h = velocity.x < 0
    elif velocity.y != 0:
        $AnimatedSprite.animation = "up"
        $AnimatedSprite.flip_v = velocity.y > 0

func _on_Player_body_entered( body ):
    hide()
    emit_signal("hit")
    $CollisionShape2D.set_deferred("disabled", true)
using Godot;
using System;

public class Player : Area2D
{
    [Signal]
    public delegate void Hit();

    [Export]
    public int Speed = 400;

    private Vector2 _screenSize;
    // Add this variable to hold the clicked position.
    private Vector2 _target;

    public override void _Ready()
    {
        Hide();
        _screenSize = GetViewport().Size;
    }

    public void Start(Vector2 pos)
    {
        Position = pos;
        // Initial target us the start position.
        _target = pos;
        Show();
        GetNode<CollisionShape2D>("CollisionShape2D").Disabled = false;
    }

    // Change the target whenever a touch event happens.
    public override void _Input(InputEvent @event)
    {
        if (@event is InputEventScreenTouch eventMouseButton && eventMouseButton.Pressed)
        {
            _target = (@event as InputEventScreenTouch).Position;
        }
    }

    public override void _Process(float delta)
    {
        var velocity = new Vector2();
        // Move towards the target and stop when close.
        if (Position.DistanceTo(_target) > 10)
        {
            velocity = (_target - Position).Normalized() * Speed;
        }
        else
        {
            velocity = new Vector2();
        }

        // Remove keyboard controls.
        //if (Input.IsActionPressed("ui_right"))
        //{
        //    velocity.x += 1;
        //}

        //if (Input.IsActionPressed("ui_left"))
        //{
        //    velocity.x -= 1;
        //}

        //if (Input.IsActionPressed("ui_down"))
        //{
        //    velocity.y += 1;
        //}

        //if (Input.IsActionPressed("ui_up"))
        //{
        //    velocity.y -= 1;
        //}

        var animatedSprite = GetNode<AnimatedSprite>("AnimatedSprite");

        if (velocity.Length() > 0)
        {
            velocity = velocity.Normalized() * Speed;
            animatedSprite.Play();
        }
        else
        {
            animatedSprite.Stop();
        }

        Position += velocity * delta;
        // We still need to clamp the player's position here because on devices that don't
        // match your game's aspect ratio, Godot will try to maintain it as much as possible
        // by creating black borders, if necessary.
        // Without clamp(), the player would be able to move under those borders.
        Position = new Vector2(
            x: Mathf.Clamp(Position.x, 0, _screenSize.x),
            y: Mathf.Clamp(Position.y, 0, _screenSize.y)
        );

        if (velocity.x != 0)
        {
            animatedSprite.Animation = "right";
            animatedSprite.FlipV = false;
            animatedSprite.FlipH = velocity.x < 0;
        }
        else if(velocity.y != 0)
        {
            animatedSprite.Animation = "up";
            animatedSprite.FlipV = velocity.y > 0;
        }
    }
    public void OnPlayerBodyEntered(PhysicsBody2D body)
    {
        Hide(); // Player disappears after being hit.
        EmitSignal("Hit");
        GetNode<CollisionShape2D>("CollisionShape2D").SetDeferred("disabled", true);
    }
}

Setting a main scene

The main scene is the one that your game will start in. In Project -> Project Settings -> Application -> Run, set Main Scene to ”Main.tscn” by clicking the folder icon and selecting it.

Vientimallit

Jotta voit viedä projekteja, sinun täytyy ladata vientimallit osoitteesta http://godotengine.org/download. Nämä mallit ovat kullekin alustalle esikäännettyjä optimoituja versioita pelimoottorista ilman editoria Voit myös ladata ne Godotissa napsauttamalla Editori -> Hallinnoi vientimalleja:

../../_images/export_template_menu.png

Voit napsauttaa ”Lataa” avautuneessa ikkunassa saadaksesi vientimallin version, joka vastaa sinun Godotin versiota.

../../_images/export_template_manager.png

Muista

Jos päivität Godotin, sinun täytyy ladata vientimallit, jotka vastaavat uutta versiota tai viedyt projektisi eivät välttämättä toimi kunnolla.

Viennin esiasetukset

Next, you can configure the export settings by clicking on Project -> Export.

Luo uudet esiasetukset viennille napsauttamalla ”Lisää…” ja valitsemalla alusta. Voit tehdä niin monia esiasetuksia kuin haluat erilaisilla asetuksilla.

../../_images/export_presets_window.png

Ikkunan alalaidassa on kaksi painiketta. ”Vie PCK/ZIP” luo vain pakatun version projektisi datasta. Se ei sisällä suoritettavaa tiedostoa, joten projektia ei voi ajaa sellaisenaan.

Toinen painike, ”Vie projekti”, luo valmiin suoritettavan version pelistäsi, kuten esimerkiksi .apk Androidille tai .exe Windowsille.

”Resurssit” ja ”Ominaisuudet” välilehdillä voit räätälöidä pelisi viennin kullekin alustalle. Voimme jättää nuo asetukset toistaiseksi rauhaan.

Vienti alustottain

Tässä luvussa käymme prosessin läpi kullekin alustalle, sisältäen kaikki tarvitsemasi ylimääräiset ohjelmistot tai edellytykset.

PC (Linux/macOS/Windows)

PC-alustoille vienti toimii samalla tavalla kaikille kolmelle tuetulle käyttöjärjestelmälle. Avaa vienti-ikkuna ja napsauta ”Lisää…” luodaksesi ne esiasetukset, jotka haluat tehdä. Napsauta sitten ”Vie projekti” ja valitse nimi ja kohdekansio. Valitse sijainti projektikansiosi ulkopuolelta.

Napsauta ”Tallenna” ja pelimoottori rakentaa vientitiedostot.

Muista

Jos teet viennin macOS:lle macOS-tietokoneella, saat .dmg tiedoston, kun taas Linuxin tai Windowsin käyttö tuottaa .zip tiedoston. Kummassakin tapauksessa pakattu tiedosto sisältää macOS .app tiedoston, jonka voit ajaa kaksoisnapsautuksella.

Muista

Jos haluat, että viedyn suoritettavan tiedoston kuvake poikkeaa oletuskuvakkeesta Windowsilla, sinun täytyy vaihtaa se käsin. Katso: Changing application icon for Windows.

Android

Vihje

Mobiililaitteissa on laaja kirjo erilaisia ominaisuuksia. Useimmiten Godotin oletusasetukset kelpaavat, mutta mobiilikehitys on joskus enemmän taidetta kuin tiedettä ja voit joutua tekemään hieman kokeiluja ja etsiä apuja saadaksesi kaiken toimimaan.

Ennen kuin voit viedä projektisi Androidille, sinun täytyy ladata seuraavat ohjelmistot:

Kun käynnistät Android Studion ensimmäisen kerran, napsauta Configure -> SDK Manager ja asenna ”Android SDK Platform Tools”. Tämä asentaa adb komentorivityökalun, jota Godot käyttää keskustellakseen laitteesi kanssa.

Seuraavaksi, luo debug keystore suorittamalla seuraava komento järjestelmäsi komentorivillä:

keytool -keyalg RSA -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 9999

Napsauta Godotissa Editori -> Editorin asetukset ja valitse Export/Android osio. Sinun täytyy asettaa tähän polut järjestelmäsi Android SDK -sovelluksiin ja juuri luomasi keystoren sijaintiin.

../../_images/export_editor_android_settings.png

Now you’re ready to export. Click on Project -> Export and add a preset for Android (see above). Select the Android Presets and under Options go to Screen and set Orientation to ”Portrait”.

Napsauta ”Vie projekti” painiketta ja Godot koostaa APK:n, jonka voit ladata laitteellesi. Tehdäksesi tämän komentoriviltä, käytä seuraavaa:

adb install dodge.apk

Muista

Voi olla, että laitteesi tarvitsee olla kehitystilassa (developer mode). Katso tarkemmat tiedot laitteesi dokumentaatiosta.

Jos järjestelmäsi tukee sitä, Godotin pelitestauspainikkeiden alueelle ilmestyy ”One-click Deploy” painike, kun yhdistät yhteensopivan Android-laitteen:

../../_images/export_android_oneclick.png

Tämän painikkeen napsauttaminen muodostaa APK:n ja kopioi sen laitteellesi yhdellä kertaa.

iOS

Muista

Kääntääksesi pelisi iOS:lle, sinulla täytyy olla MacOS-tietokone, jossa on asennettuna Xcode.

Ennen vientiä, sinun täytyy asettaa joitakin asetuksia, jotta projektin vienti onnistuisi. Ensin, ”App Store Team Id”, jonka löydä kirjautumalla sisään omalle Apple-kehittäjätunnuksellesi ja katsomalla ”Membership”-osiota.

Sinun täytyy myös asettaa ikonit ja käynnistyskuvat, kuten näytetty alla:

../../_images/export_ios_settings.png

Napsauta ”Vie projekti” ja valitse kohdekansio.

Kun olet vienyt projektisi onnistuneesti, löydät seuraavat kansiot ja tiedostot luotuina antamastasi sijainnista:

../../_images/export_xcode_project_folders.png

Voit nyt avata projektisi Xcodessa ja kääntää projektin iOS:lle. Xcoden kääntämiseen liittyvät toimenpiteet eivät kuulu tämän oppaan piiriin. Katso https://help.apple.com/xcode/mac/current/#/devc8c2a6be1 lisätietoja varten.

HTML5 (verkko)

Napsauta ”Vie projekti” HTML5-esiasetuksissa. Meidän ei tarvitse muuttaa mitään oletusasetuksista.

Kun vienti on valmis, saat seuraavat tiedostot sisältävän kansion:

../../_images/export_web_files.png

Viewing the .html file in your browser lets you play the game. However, you can’t open the file directly, it needs to be served by a web server. If you don’t have one set up on your computer, you can search online to find suggestions for your specific OS.

Syötä selaimeesi URL siihen kohteeseen, jonne sijoitit html-tiedoston. Voit joutua odottamaan hetken pelin latautumista, ennen kuin näet aloitusruudun.

../../_images/export_web_example.png

Pelin alapuolella oleva konsoli-ikkuna kertoo sinulle, jos jokin meni vikaan. Voit kytkeä sen pois päältä asettamalla ”Vie debugaten” off-asentoon, kun viet projektisi.

Muista

While WASM is supported in all major browsers, it is still an emerging technology and you may find some things that don’t work. Make sure you have updated your browser to the most recent version, and report any bugs you find at the Godot Github repository.