System update on April 6th from 00.00 to 02.00 UTC+3. Expect possible downtime during the maintenance.

Huom! Nämä wikisivut ovat osittain vielä työn alla, osa sisällöstä saattaa olla puutteellista. Ongelmakohtien viereen voit jättää kommentin, yliopiston käyttäjät myös pystyvät (ja saavat) muokata sivuja.

Jypelin käyttöohjeet » Esimerkkejä käyttöliittymän tekemisestä

Esimerkkejä, järjestyksessä yksinkertaisesta monipuolisempaan.

1. Tekstiä ruudun oikeaan ylänurkkaan

Tsekkaa myös tekstikentän ohje.

Label teksti = new Label("Tekstiä");
teksti.X = Screen.Right - 100;
teksti.Y = Screen.Top - 50;
teksti.TextColor = Color.Green;
Add(teksti);

2. Monta tekstiä päällekäin

VerticalLayout asettelu = new VerticalLayout();
asettelu.Spacing = 30;

Widget laatikko = new Widget(asettelu);
laatikko.Color = Color.Transparent;
Add(laatikko);

Label otsikko = new Label("Otsikko");
laatikko.Add(otsikko);

Label teksti1 = new Label("Tekstiä...");
laatikko.Add(teksti1);

Label teksti2 = new Label("Lisää tekstiä...");
laatikko.Add(teksti2);

3. Ikkuna, jossa on tekstiä

MessageWindow ikkuna = new MessageWindow("Eeppinen tarina siitä miten alienit ovat vallanneet 
maan ja pelaajan täytyy piestä ne...");
Add(ikkuna);

4. Mätkintäpelin HUD (eli ruudun yläreunassa näkyvät palkit)

Tässä esimerkissä oletetaan, että pelissä on mittarit pelaajien elämälle, jotka on määriteltynä luokan sisällä:

DoubleMeter pelaaja1Elama;
DoubleMeter pelaaja2Elama;

Katso myös laskurien ohje.

Sekä niiden alustukset, esimerkiksi Begin()-aliohjelmassa:

pelaaja1Elama = new DoubleMeter(100);
pelaaja1Elama.MaxValue = 100;
pelaaja2Elama = new DoubleMeter(100);
pelaaja2Elama.MaxValue = 100;

Palkkien luominen onnistuu sitten tähän tapaan:

BarGauge pelaaja1Elamapalkki = new BarGauge(20, Screen.Width / 3);
pelaaja1Elamapalkki.X = Screen.Left + Screen.Width / 4;
pelaaja1Elamapalkki.Y = Screen.Top - 40;
pelaaja1Elamapalkki.Angle = Angle.FromDegrees(90);
pelaaja1Elamapalkki.BindTo(pelaaja1Elama);
pelaaja1Elamapalkki.Color = Color.Red;
pelaaja1Elamapalkki.BarColor = Color.Green;
Add(pelaaja1Elamapalkki);

BarGauge pelaaja2Elamapalkki = new BarGauge(20, Screen.Width / 3);
pelaaja2Elamapalkki.X = Screen.Right - Screen.Width / 4;
pelaaja2Elamapalkki.Y = Screen.Top - 40;
pelaaja2Elamapalkki.Angle = Angle.FromDegrees(-90);
pelaaja2Elamapalkki.BindTo(pelaaja2Elama);
pelaaja2Elamapalkki.Color = Color.Red;
pelaaja2Elamapalkki.BarColor = Color.Green;
Add(pelaaja2Elamapalkki);

5. Inventory

Inventory, eli esinevalikko:

Huomaa, että nykyisellään (versio 4.0.6) Jypeli tukee vain vaaka- sekä pystysuuntaisia sommitteluja. Näin ollen valikon, jossa esineet ovat monessa rivissä, tekeminen on hankalaa.

Kannattaa periä oma luokka valikkoa varten (kts. myös perinnän ohje):

/// <summary>
/// Esinevalikko.
/// </summary>
class Inventory : Widget
{
    /// <summary>
    /// Tapahtuma, kun esine on valittu.
    /// </summary>
    public event Action<PhysicsObject> ItemSelected;

    /// <summary>
    /// Luo uuden esinevalikon.
    /// </summary>
    public Inventory()
        : base(new HorizontalLayout())
    {
    }

    /// <summary>
    /// Lisää esineen.
    /// </summary>
    /// <param name="item">Lisättävä esine.</param>
    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
    public void AddItem(PhysicsObject item, Image kuva)
    {
        PushButton icon = new PushButton(kuva);
        Add(icon);
        icon.Clicked += delegate() { SelectItem(item); };
    }

    void SelectItem(PhysicsObject item)
    {
        if (ItemSelected != null)
        {
            ItemSelected(item);
        }
    }
}

Inventoryn tekeminen tapahtuu kuten minkä tahansa muunkin widgetin:

Inventory inventory = new Inventory();
Add(inventory);

Esineen lisääminen inventoryyn. tässä miekka on PhysicsObject-tyyppinen olio:

inventory.AddItem(miekka, miekanKuva);

6. Pelaajan elämät näkyvät sydäminä

HorizontalLayout asettelu = new HorizontalLayout();
asettelu.Spacing = 10;

Widget sydamet = new Widget(asettelu);
sydamet.Color = Color.Transparent;
sydamet.X = Screen.Center.X;
sydamet.Y = Screen.Top - 30;
Add(sydamet);

for (int i = 0; i < 10; i++)
{
    Widget sydan = new Widget(30, 30, Shape.Heart);
    sydan.Color = Color.Red;
    sydamet.Add(sydan);
}

7. Hävittäjälentokoneen ohjaamo

class Tutkanaytto : Widget
{
    public Tutkanaytto(Image image)
        : base(new VerticalLayout() { Spacing = 10, LeftPadding = 5, RightPadding = 5, TopPadding = 5, BottomPadding = 5 } )
    {
        var vaakaAsettelu = new HorizontalLayout() { Spacing = 10 };
        Color = new Color(40, 40, 40);
        Add(TeeNapit(vaakaAsettelu));
        Add(TeeKeskiosa(image));
        Add(TeeNapit(vaakaAsettelu));
    }

    Widget TeeKeskiosa(Image image)
    {
        var pystyAsettelu = new VerticalLayout() { Spacing = 10, LeftPadding = 5, RightPadding = 5, TopPadding = 5, BottomPadding = 5 };
        Widget w = new Widget(new HorizontalLayout()) { Color = Color.Transparent };
        w.Add(TeeNapit(pystyAsettelu));
        w.Add(new Widget(image));
        w.Add(TeeNapit(pystyAsettelu));
        return w;
    }

    Widget TeeNapit(ILayout layout)
    {
        Widget napit = new Widget(layout) { Color = Color.Transparent };
        for (int i = 0; i < 8; i++)
            napit.Add(new PushButton(20, 20) { Color = new Color(230, 230, 230) } );
        return napit;
    }
}

void LuoHavittajalentokoneenOhjaamo()
{
    Widget ohjaamo = new Widget(Screen.Width, Screen.Height / 2) { Color = Color.Black, SizeByLayout = false };
    ohjaamo.Layout = new VerticalLayout();
    ohjaamo.Add(new HorizontalSpacer());
    ohjaamo.Add(TeeYlaosa());
    ohjaamo.Add(TeeKeskiosa());
    ohjaamo.Add(new HorizontalSpacer());
    Add(ohjaamo);

    ohjaamo.RefreshLayout();
    ohjaamo.X = 0;
    ohjaamo.Y = Screen.Bottom + ohjaamo.Height / 2;
}

Widget TeeYlaosa()
{
    Widget ylaOsa = new Widget(new HorizontalLayout()) { Color = Color.Transparent };

    Widget vivut = new Widget(new VerticalLayout() { Spacing = 5 }) { Color = Color.Transparent };
    vivut.Add(new Widget(vipuAlasKuva));
    vivut.Add(new Widget(vipuAlasKuva));
    vivut.Add(new Widget(vipuYlosKuva));
    vivut.Add(new Widget(vipuAlasKuva));
    ylaOsa.Add(vivut);

    Widget mittarit = new Widget(new VerticalLayout() { Spacing = 5 }) { Color = Color.Transparent };
    mittarit.Add(new Widget(pieniMittariKuva));
    mittarit.Add(new Widget(pieniMittari2Kuva));
    ylaOsa.Add(mittarit);

    ylaOsa.Add(new Widget(tasoMittariKuva));

    mittarit = new Widget(new VerticalLayout() { Spacing = 5 }) { Color = Color.Transparent };
    mittarit.Add(new Widget(pieniMittari3Kuva));
    mittarit.Add(new Widget(pieniMittari2Kuva));
    ylaOsa.Add(mittarit);

    vivut = new Widget(new VerticalLayout() { Spacing = 5 }) { Color = Color.Transparent };
    vivut.Add(new Widget(vipuYlosKuva));
    vivut.Add(new Widget(vipuAlasKuva));
    vivut.Add(new Widget(vipuYlosKuva));
    vivut.Add(new Widget(vipuAlasKuva));
    ylaOsa.Add(vivut);

    return ylaOsa;
}

Widget TeeKeskiosa()
{
    Widget keskiosa = new Widget(new HorizontalLayout() { Spacing = 10 }) { Color = Color.Black };

    keskiosa.Add(new Tutkanaytto(tutka1Kuva));

    Widget mittarit = new Widget(new VerticalLayout() { Spacing = 5 }) { Color = Color.Transparent };
    mittarit.Add(new Widget(mittari1Kuva));
    mittarit.Add(new Widget(mittari2Kuva));
    keskiosa.Add(mittarit);

    keskiosa.Add(new Tutkanaytto(tutka2Kuva));
    return keskiosa;
}

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.