AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Spieler in Mitte, Umgebung bewegt sich(Rollenspiel/Jump&Run)

Spieler in Mitte, Umgebung bewegt sich(Rollenspiel/Jump&Run)

Ein Thema von ISAS · begonnen am 22. Feb 2004 · letzter Beitrag vom 1. Mär 2004
Antwort Antwort
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#1

Spieler in Mitte, Umgebung bewegt sich(Rollenspiel/Jump&

  Alt 22. Feb 2004, 14:49
Ein einziges Problem hindert an dem weiterkommen meines Rollenspieles !!!

Jeder kennt Diablo, Baal oder Sacred.
Ein typisches Rollenspiel eben wo der Spieler im Mittelpunkt fixiert ist und sich nur alles rundherum bewegt.
Mein Spiel ist natürlich mit DelphiX gemacht und meine Delphiversion ist 4.

Da es natürlich mehrere Büsche im Spiel gibt, welche dieselben Eigenschaften haben, deklariere ich jeden Busch als zB. TBusch, Ein Beispiel zum erstellen dieser Büsche wäre so:

Delphi-Quellcode:
 for i:= 1 to 2 do begin
  with TBusch.Create(DXSpriteEngine1.Engine) do
  begin
    x:=i*32;
    y:=0;
  end;
 end;
Nun gibt es 2 Büsche, die dieselben Eigenschaften haben, aber unterschiedliche Koordinaten.
Das Bewegen funktioniert, aber die collision nicht ganz, welche folgendermassen aussieht:

Delphi-Quellcode:
procedure TBusch.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  if sprite is TPlayer then
    begin
      x:=x-32 {Nur als Beispiel}
    end;
end;
Nun verändern sich die Kordinaten nur von dem Busch, mit dem der Player zusammengestossen ist. Der 2 Busch "ignoriert" die collision bzw erfährt keine. Es wird ziemlich alles gleich gemacht, wie bei den DelphiX Tutorials auf www.delphi-treff.de .

Ich hab auch schon folgendes versucht:

var Busch: array of TBusch; Nun bekommt jeder Busch eine zusäztliche Zahl und bei einer collision mit einem Busch, kann ich eine FOR-Schleife aufrufen, damit er das mit allen Büschen macht. Mit Delphi 6 personal funktioniert das einigermassen, aber auch nicht besonders und ich habe ja nur Delphi4. Da funktioniert das gar nicht.

Es wird doch jemand mal ein Rollensiel, Jump&Run oder anderes mit DelphiX, wo der Spieler im Mittelpunkt fixiert ist, programmiert haben. Ich bekomm das einfach nicht hin

Danke im Vorraus, ISAS
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#2

Re: Spieler in Mitte, Umgebung bewegt sich(Rollenspiel/Jump&

  Alt 23. Feb 2004, 14:06
Hallo Isas,

Die DxSpriteEngine von DelphiX hat selbst Koordinaten (DxSpriteEngine1.X und DxSpriteEngine1.Y). Wenn du diese veränderst, dann werden alle Sprites dieser SpriteEngine verschoben.
Du könntest einfach den Spieler bewegen und die Koordinaten der einzelnen Büsche (Sprites) gleich lassen und nur die Koordinaten der SpriteEngine so angleichen, dass der Spieler immer in der Mitte ist.

Grüße
Seniman
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#3

Re: Spieler in Mitte, Umgebung bewegt sich(Rollenspiel/Jump&

  Alt 23. Feb 2004, 17:31
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Inifiles, Classes, Graphics, Controls, Forms, Dialogs,
  DXDraws, Grids, StdCtrls, ExtCtrls, DXClass, DXSprite, DXInput;

type
  TForm1 = class(TForm)
    DXImageList1: TDXImageList;
    DXSpriteEngine1: TDXSpriteEngine;
    DXTimer1: TDXTimer;
    DXInput1: TDXInput;
    DXDraw1: TDXDraw;
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
    procedure FormCreate(Sender: TObject);
      private
    { Private-Deklarationen}
  public
    { Public-Deklarationen}
  end;

TPlayer = class(TImageSprite)
  public
    constructor Create(AParent: TSprite ); override;
  end;

TAnimation = class(TImageSprite)
  public
  status:integer;
    procedure DoMove(MoveCount: Integer); override;
    procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
    constructor Create(AParent: TSprite ); override;
  end;


var
  Form1: TForm1;
  Animation:TAnimation;
  Player: TPlayer;
implementation

{$R *.DFM}

constructor TAnimation.Create(AParent: TSprite );
begin
  inherited Create(AParent);
  Image:=Form1.DXImageList1.Items[0];
  Width :=Image.Width;
  Height :=Image. Height;
end;

constructor TPlayer.Create(AParent: TSprite );
begin
  inherited Create(AParent);
  Image:=Form1.DXImageList1.Items[1];
  Width :=Image.Width;
  Height :=Image. Height;
end;

procedure TAnimation.DoMove(MoveCount: Integer);
begin
  inherited DoMove(MoveCount);
  If isUp in Form1.DXInput1.States Then begin
    Y := Y -2;
    status:=1;
    end;
  If isDown in Form1.DXInput1.States Then begin
    Y := Y + 2;
    status:=2;
    end;
  If isLeft in Form1.DXInput1.States Then begin
    X := X -2;
    status:=3;
    end;
  If isRight in Form1.DXInput1.States Then begin
    X := X +2;
    status:=4;
    end;

  collision;
end;

procedure Tanimation.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  if sprite is TPlayer then
    begin

    if status=1 then Y:=Y+2;
    if status=2 then Y:=Y-2;
    if status=3 then x:=x+2;
    if status=4 then x:=x-2;


    end;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  DXInput1.Update;
  DXSpriteEngine1.Move(1);
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXDraw1.Flip;

end;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin

  with TPlayer.Create(DXSpriteEngine1.Engine) do
  begin
    x:=100;
    y:=100;
  end;

for i:= 1 to 3 do begin

  with TAnimation.Create(DXSpriteEngine1.Engine) do
  begin
    x:=64*i;
    y:=0;
  end;
end;
end;

end.
Hier mal der Quellcode des einfachsten Beispiel für dieses Thema. In diesem Beispiel kollidiert ein Sprite (von TBusch) mit TPlayer. Ich hab dir meine EXE dazugehängt und wie du sehen wirst, "kollidiert" er wirklich nur mit dem sprite. Obwohl es sich doch um TBusch handelt.
Angehängte Dateien
Dateityp: exe project1_199.exe (384,0 KB, 45x aufgerufen)
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#4

Re: Spieler in Mitte, Umgebung bewegt sich(Rollenspiel/Jump&

  Alt 23. Feb 2004, 19:15
PS: So ganz versteh ich das aber nicht, wie du das meinst.
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#5

Re: Spieler in Mitte, Umgebung bewegt sich(Rollenspiel/Jump&

  Alt 1. Mär 2004, 17:29
Naja, egal. Hab das nun so gemacht, das vor TGegenstand.DoMove ein TPlayer.DoMove hinkommt. Nun bewegt sich zuerst der Player, schaut ob eine collision vorhanden ist, reagiert dann auch entsprechend und geht dann wieder in den Mittelpunkt. Dann bewegt sich erst TGegenstand oder nicht.

Delphi-Quellcode:
Procedure TPlayer.DoMove(MoveCount: Integer);
Begin
  Inherited domove(movecount);
  If isup in form1.dxinput1.states Then Begin
  y:=y-32;
  status:=1;
  collision
....
Trotzdem Danke!!!
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz