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.