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

Tician

Frischling

  • »Tician« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Bad Friedrichshall

Beruf: FISI

  • Private Nachricht senden

1

01.02.2016, 19:53

Ähm... Kreis zeichnen - aber wie?

Hey Leute,

ich bin ein absoluter Newbie und versuche mich an einem Snake... oder zumindest mal irgendwas bewegen... oder in meinem Fall zumindest erstmal einen Kreis zu haben. Ja, daran scheitert es schon. In der Schule arbeiten wir bisher nur mit Konsole, heißt ich hab wenig Erfahrung mit der grafischen Oberfläche.
Schaut den Code nicht zu genau an, ich werd da experimentieren sobald ich einen Kreis habe, daher bitte ich jemanden mich aufzuklären was ich brauche um meinen Kreis zu bekommen...

Der Code:

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
70
71
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
using System.Windows.Input;

namespace Snake
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            /*timer1.Interval = 1000 / 60; //60 FPS
            timer1.Start();*/

            int posX = 50;
            int posY = 50;

            SolidBrush kreis = new SolidBrush(Color.Black);
            Graphics kreis_ = pictureBox1.CreateGraphics();
            kreis_.FillEllipse(kreis, new Rectangle(posX, posY, 20, 20));
            kreis.Dispose();
            kreis_.Dispose();

            if (Form.ModifierKeys == Keys.Up)
            {
                posY += 4;
            }
            if (Form.ModifierKeys == Keys.Down)
            {
                posY -= 4;
            }
            if (Form.ModifierKeys == Keys.Left)
            {
                posX -= 4;
            }
            if (Form.ModifierKeys == Keys.Right)
            {
                posX += 4;
            }
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            
        }
    }

 /*   class Schlange
    {
        public int x { get; set; }
        public int y { get; set; }

        public Schlange()
        {
            x = 0;
            y = 0;
        }
    }*/
}


Ich glaube mir fehlt ein Auslöser, ein Button oder mein Code liegt in der falschen Methode? In der grafischen Oberfläche gibt es keine Main-Methode wie ich sie von der Konsole kenne wo der Code ausgeführt wird... .

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

01.02.2016, 20:15

Ein guter Anfang wäre schon mal ein vernünftiges Framework für die Spieleentwicklung zu wählen. Für C# kenne ich:
XNA (wird nicht mehr weiterentwickelt, reicht aber sicherlich erst mal)
SFML.Net (eigentlich für C++ entwickelt kann man SFML aber mit diesem Binding auch unter C# nutzen. Gefiel mir sehr gut)
SDL.Net (eigentlich für C, Dank dem Binding aber auch für C# verfügbar)

Ich persönlich würde SFML.Net nehmen. Mir selbst hat das am meisten zugesagt. Es gibt aber noch viele viele weitere. Da kannst du auch einfach mal bei Google suchen. Für welches du dich am Ende entscheidest ist an sich erst mal egal. Einfach erst mal anfangen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Tician

Frischling

  • »Tician« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Bad Friedrichshall

Beruf: FISI

  • Private Nachricht senden

3

01.02.2016, 20:33

Dadurch das ich Azubi bin hätte ich XNA und ich habe es auch probiert zu installieren, aber auch da scheitert es, da mir XNA schon vor der Installation sagt ich brauche Visual Studio 2010 (ich habe aber 2015) und Microsoft ist da leider auch nicht gerade hilfreich. Ich kriege es ums verrecken nicht hin.
https://social.msdn.microsoft.com/Forums…tproappcompatde

Eine Idee? Ich habe viele gesehen die Probleme haben, aber mit sind die Lösungen entweder nicht klar verständlich doer es funktioniert trotzdem nicht.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

01.02.2016, 20:54

XNA wird halt nicht mehr weiterentwickelt. MonoGame ist (vereinfacht ausgedrückt) eine OpenSource variante von XNA und lässt sich genau so verwenden.

Tician

Frischling

  • »Tician« ist der Autor dieses Themas

Beiträge: 32

Wohnort: Bad Friedrichshall

Beruf: FISI

  • Private Nachricht senden

5

01.02.2016, 21:58

Supi, :thumbup:
das hört sich gut an ich werde mir dann mal beizeiten MonoGame für Visual Studio runterladen und anschauen :)

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

6

01.02.2016, 22:35

Mit MonoGame bist du ganz gut unterwegs. Gibt einiges an Doku und Literatur dazu.

7

09.02.2016, 13:42

GDI war zwar nie dafür vorgesehen aber dank der schnellen CPU sind inzwischen viele 2D Spiele aus dem vorherigen Jahrtausend damit realisierbar. Ein Spiel wie Super Mario liegt damit z.B. im Bereich des Möglichen. Zum anderen kannst du die Grafikausgabe von der Spiellogik trennen und später austauschen.

Zu deinem Ansatz: Für die Art der Spiele wir normalerweise eine Spieleschleife verwendet die jedes Frame berechnet und zeichnet. Für den Anfang reicht hier ein Timer und 30 FPS (Timer garantieren keine stabile Framerate und schaffen glaube ich 60 FPS gar nicht). Im Tick-Ereignis führst du nun die Berechnung durch und rufst das neuzeichnen der Form mit der Methode Invalidate auf. Dadurch wird das Paint-Ereignis ausgelöst in dem du die Grafikausgabe implementieren kannst. Hier ein Beispiel das einen Punkt von links nach rechts wandern lässt:

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
    public partial class Form1 : Form
    {
        private int positionX = 0;

        public Form1()
        {
            InitializeComponent();

            this.DoubleBuffered = true; // Flackern verhindern
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            // Berechnungen durchführen, z.B. Position 

            if (this.positionX > this.ClientSize.Width)
                this.positionX = 0;
            else
                this.positionX += 4;

            // Erzwingt ein neuzeichnen der Form --> Form1_Paint
            this.Invalidate();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            // Zeichnen

            e.Graphics.FillEllipse(Brushes.Red, this.positionX, 50, 20, 20);
        }
    }

CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

8

09.02.2016, 23:09

Naja C# WPF kann er auch benutzen, da hat er auch Möglichkeiten für 3D Objekte. Am Anfang die vielleicht nur 2D-Positionieren. Allerdings kann er mit WPF sehr schnell einen Kreis zeichen und bewegen. Habe ich selbst schon gemacht. (Notensatzprogramm mit selbermalen :D )
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

10.02.2016, 23:33

Auf Dauer wäre es wohl besser, direkt mit einer dafür vorgesehenen Bibliothek (XNA/MonoGame, DirectX, SFML, ...) zu arbeiten. Mit GDI+ und vergleichbaren APIs wird man zwar auch in der Lage dazu sein, Spiele zu entwickeln, aber ab einem bestimmten Punkt wird es mit diesen umständlicher und einige Dinge lassen sich damit meist nicht mehr sinnvoll umsetzen.
Kreise könnte man pixelweise zeichnen, mit entsprechenden Funktionalitäten der Bibliothek (in deinem Fall wohl GDI+) oder indem man eine Grafik zeichnet, die einen Kreis beinhaltet. In den meisten Spielen wäre letztere Möglichkeit (bzw. das Rendern eines 3D Models) die gewählte Option, da man so nicht auch die geometrische Form des Kreises (mit ein wenig Dekoration, wie Umrandung oder Füllung) beschränkt ist.
Wenn du versuchen willst, den Kreis pixel für pixel zu zeichnen: gehe einfach alle Pixel im Rechteck um deinen Kreis (Breite und Höhe entsprechen dem Durchmesser des Kreises) durch und setze den Pixel, wenn er sich im Kreis befindet. (Hinweis: mit Sinus und Kosinus kann man das prüfen.)

Solltest du Desktop-Anwendungen mit C# entwickeln wollen, würde ich dich eher zu WPF raten, da man dort (in Kombination mit der richtigen Projektstruktur) wesentlich besser entwickeln kann. (Damit wäre die Anwendung zwar nur auf Windows ausführbar, allerdings würde man Cross-Platform Anwendungen ohnehin mit etwas anderem entwickeln, bspw. mit C++ und Qt.)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

11.02.2016, 07:06

(Hinweis: mit Sinus und Kosinus kann man das prüfen.)
Das ist sehr langsam. Besser wäre es den Abstand des Punkts zum Mittelpunkt zu berechnen (Pythagoras) und zu schauen, ob er im Radius liegt. Dafür braucht man nur Addition und Multiplikation, nicht mal eine Wurzel.
Generell ist aber davon abzuraten es von Hand zu zeichnen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (11.02.2016, 07:22)


Werbeanzeige