Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FunkyGamer

Frischling

  • »FunkyGamer« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bremen

Beruf: Schüler

  • Private Nachricht senden

1

04.12.2010, 22:29

[C#][SDL]Menü erstellen

Tag Leute,
derzeit bin ich dabei ein kleines Spiel zu erstellen.
Mit dem TextSprite Element habe ich ein Text erstellt und möchte daraus am Ende ein Menü erstellen.
Nun habe ich 2 Fragen:

1. Ist es ratsam TextSprite zu verwenden oder gibts es bessere Methoden?
2. Falls ich TextSprite verwenden soll, wie frage ich dann ab, ob der Text geklickt wurde?

Derzeit sieht mein Code so aus:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using SdlDotNet;
using SdlDotNet.Audio;
using SdlDotNet.Core;
using SdlDotNet.Graphics;
using SdlDotNet.Input;
using SdlDotNet.Particles;
using SdlDotNet.Windows;
using Tao.Sdl;

namespace Erstes_Spiel
{
    public class Program
    {
        Font arial = new Font("arialn.ttf", 50);
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        public static void Main()
        {
            Program game = new Program();
            game.Go();
        }

        public Program()
        {
        }

        public void Go()
        {
            Video.SetVideoMode(1000, 500, false);
            Video.WindowCaption = "SDL Test";
            Video.Screen.Fill(System.Drawing.Color.White);
            SdlDotNet.Graphics.Sprites.TextSprite text = new SdlDotNet.Graphics.Sprites.TextSprite("Hallo", arial, System.Drawing.Color.Black);
            text.Center = new System.Drawing.Point(500, 250);
            Video.Screen.Blit(text);
            addHandlers();
            Events.Run();
        }

        private void addHandlers()
        {
            Events.Quit+=new EventHandler<QuitEventArgs>(Events_Quit);
            Events.Tick+=new EventHandler<TickEventArgs>(Events_Tick);
        }

        private void removeHandlers()
        {
            Events.Quit -= new EventHandler<QuitEventArgs>(Events_Quit);
            Events.Tick -= new EventHandler<TickEventArgs>(Events_Tick);
        }

        private void Events_Quit(object sender, QuitEventArgs e)
        {
            removeHandlers();
            Events.QuitApplication();
            Application.Exit();
        }

        private void Events_Tick(object sender, TickEventArgs e)
        {
            Video.Screen.Update();
        }
    }
}


Ich würde mich freuen, wenn mir jemand helfen kann.

MFG,
Funky
Komm rüber auf die dunkle Seite, wir haben Kekse :evil:

2

05.12.2010, 12:47

Hallo,

Gleich mal vorweg: In C# kenn ich mich nicht aus ... Denke jedoch, dir jedenfalls bei deiner Frage, wie man überprüft, ob der Text angeklickt wurde, helfen kann ...

Ich habe das (in C++) so gelöst, dass ich die aktuelle Maus - Position abgefragt habe und dann überprüfe, ob der Mauszeiger sich innerhalb des Textes befindet (also innerhalb des Bereiches, wo du den Text hin - renderst). Und dann muss nur noch überprüft werden, ob die linke Maustaste auch gedrückt wurde

Hoffe, dass ich dir wenigstens ein bisschen weiterhelfen konnte,
Liebe Grüße,
Ombalat

FunkyGamer

Frischling

  • »FunkyGamer« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bremen

Beruf: Schüler

  • Private Nachricht senden

3

05.12.2010, 14:04

Wie du das meinst habe ich verstanden.
Wie soll ich allerdings abfragen?
MouseButtonDown Event definieren, aber wie soll ich auf den Text zugreifen?
Diese befinden sich ja in einer anderen Funktion(Go()).

//E:
Kannst mir auch ruhig deinen C++ Code senden, das übersetzen ist kein Problem, da zwischen C# und C++ kein großer Unterschied besteht.
Komm rüber auf die dunkle Seite, wir haben Kekse :evil:

4

05.12.2010, 14:43

Also ... Ich hab mit hilfe einer Variable ausgewählt, auf welchem Menüpunkt ich mich befinde

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define Menue_Start 1

switch(Event.type)
{
     case (SDL_MOUSEMOTION):
     {
        //Positionen der Maus
        int x_Pos = Event.button.x;
        int y_Pos = Event.button.y;

               //Menü auswahl
           if(x_Pos > 186 && x_Pos < 340) //Überprüfe, ob man sich an der Stelle befindet, in der sich der Menüpunkt "Menue_Starte" befindet
                 m_MenueSelected = Menue_Start;
           else if(y_Pos > 518 && y_Pos < 555)
                 .
                 .
                 .
           else
                m_MenueSelected = Menue_Default; //Kein Menü ausgewählt
      }
}


und danach habe ich dann überprüft, ob die Maustaste gedrückt wurde

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
case (SDL_MOUSEBUTTONDOWN):
{       
        switch (Event.button.button)
            {
            //Linke Maustaste gedrückt?
                    case (SDL_BUTTON_LEFT):
                    {   
                        //Das selbe wie bei den Key - Buttons
                        if(m_MenueSelected == Menue_Start)
                            {       
                               ...
                            }
                     }
              }

}

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Ombalat« (05.12.2010, 14:50)


FunkyGamer

Frischling

  • »FunkyGamer« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bremen

Beruf: Schüler

  • Private Nachricht senden

5

05.12.2010, 14:47

Oh bin ich dumm :D
Ich habe versucht die Position immer mit .Center abzufragen :D
Stattdessen kann ich ja einfach die Koordinaten nehmen :)
Danke ;)
Probiere es nachher mal aus.
Komm rüber auf die dunkle Seite, wir haben Kekse :evil:

6

05.12.2010, 14:51

Gerne :)
Viel Erfolg noch !

Liebe Grüße,
Ombalat

FunkyGamer

Frischling

  • »FunkyGamer« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bremen

Beruf: Schüler

  • Private Nachricht senden

7

05.12.2010, 17:17

Prima, funktioniert nun :)
Ich danke dir ;D
Komm rüber auf die dunkle Seite, wir haben Kekse :evil:

Werbeanzeige