Canvas

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
karlheinz4
Beiträge: 10
Registriert: So 6. Mai 2012, 15:23

Canvas

Beitrag von karlheinz4 »

Hallo,
ich möchte ein Spiel entwerfen, dass gewisse Ähnlichkeiten mit Bomberman besitzt. Jedoch komme ich an einer entscheidenden Stelle nicht weiter.

Mit array habe ich eine Spielwelt definiert und lasse einen Punkt mittels canvas zeichen (momentan mein Bomberman), den ich innerhalb des Spielfeldes bewegen kann. Jedoch muss ich den Hintergrund zusätzlich mit canvas überzeichnen, da die Fläche, wo sich zuvor der
Punkt (also Bomberman) befunden hat, nicht mehr die Hintergrundfarbe annimmt. Er hinterlässt sozusagen seine Spuren…

Self.Canvas.Pen.Color := clwhite
Self.Canvas.Brush.Color := clwhite;
Self.Canvas.Rectangle( 0, 0, ClientWidth, ClientHeight );

Mit diesem Befehl wird jedoch meine komplette Spielwelt bzw. die Mauern und Hindernisse mit der Hintergrundfarbe überzeichnet und nicht mehr angezeigt. Ich suche seit einiger Zeit vergebens nach einer Lösung und hoffe, dass ihr mir helfen könnt.
Das gezeichnete von Canvas muss einfach Transparent sein, damit die Spielwelt samt ihrer Hindernisse erhalten bleibt.

mfG
karlheinz4

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Canvas

Beitrag von Socke »

karlheinz4 hat geschrieben:Mit diesem Befehl wird jedoch meine komplette Spielwelt bzw. die Mauern und Hindernisse mit der Hintergrundfarbe überzeichnet und nicht mehr angezeigt. Ich suche seit einiger Zeit vergebens nach einer Lösung und hoffe, dass ihr mir helfen könnt.
Das gezeichnete von Canvas muss einfach Transparent sein, damit die Spielwelt samt ihrer Hindernisse erhalten bleibt.
Wenn du deine Spielfigur bewegst, müsstest du den Hintergrund der alten Position neu mit dem Hintergrund bemalen. Dazu musst du natürlich ausrechnen, wo das auf deinem Canvas ist.
Eine Alternative wäre, deine Spielfigur auf einen zweiten Canvas zu zeichnen, der vor dem Hintergrund-Canvas positioniert wurde. Dann musst du nur diesen bewegen; Jedoch wird hier die Interaktion zwischen Spielfigur und Hintergrund ein wenig schwieriger.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

karlheinz4
Beiträge: 10
Registriert: So 6. Mai 2012, 15:23

Re: Canvas

Beitrag von karlheinz4 »

Socke hat geschrieben: Wenn du deine Spielfigur bewegst, müsstest du den Hintergrund der alten Position neu mit dem Hintergrund bemalen. Dazu musst du natürlich ausrechnen, wo das auf deinem Canvas ist.
Danke erstmal für deine Antwort. So etwas in der Richtung klingt nicht schlecht. Nur wie gehe ich das ganze an? :roll:
Vllt ein paar Details:
Meine Spielwelt:

Code: Alles auswählen

x-Koordinaten: 0-54; y-Koordinaten: 0-40
Spielfigur:

Code: Alles auswählen

begin
  rCanvas.Pen.Color := clblack;   //Zeichnen von Bomberman
  rCanvas.Brush.Color := clblack; //Zeichnen von Bomberman
 
  for Index := 0 to rKoerperTeile do
  begin
    StartX := rKoerper [Index].X * 18;   // Größe von Bomberman mit Angaben der x,y-Koordinate
    EndeX := rKoerper [Index].X * 18 + 18; //"
    StartY := rKoerper [Index].Y * 18;     //"
    EndeY := rKoerper [Index].Y * 18 + 18; //"
 
    rCanvas.Ellipse( StartX, StartY, EndeX, EndeY); //kreisförmiger Bombermankörper
end;
Zuletzt geändert von Lori am Di 5. Mär 2013, 18:20, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen.

karlheinz4
Beiträge: 10
Registriert: So 6. Mai 2012, 15:23

Re: Canvas

Beitrag von karlheinz4 »

Kann mir keiner weiter helfen? :cry: :cry: :cry:

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Canvas

Beitrag von theo »

Wie gesagt, du muss bei jedem Schritt den Hintergrund neu malen.

Wenn es nur eine Farbe ist, mit Canvas.FillRect oder bei einem Bild mit Canvas.Draw

Schau dir vllt. auch diese Seite mal an http://wiki.freepascal.org/Developing_with_Graphics/de

Antworten