Autor Beitrag
LastRide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 01.08.09 13:45 
Hallo,

Ich habe vor kurzem damit angefangen ein neues Programm zu schreiben soweit so gut :D. Als ich dann jedoch anfangen wollte die ersten Images zu bewegen kamm es zu unschönem Ruckeln. Darauf hin habe ich versucht die Images mit Andorra 2D zu laden und zu bewegen nur leider blicke ich da nicht richtig durch, denn sobald ich ein Bild lade, was aufgrund der Tutorials die ich gefunden habe ja auch kein Problem ist, ist der Gesamte Bildschirm von einer schwarzen Fläche überdeckt und man sieht nur noch das eine Bild.

Jetzt meine Frage dazu:

Ist es ratsam die Bewegung bei MouseOver Image mit Andorra zu machen um das Ruckeln weg zu bekommen. Wenn ja wie ist es möglich diese Schwarze Ebene weg zu bekommen so das das Image einfach auf dem normalen Hintergrund zu sehen ist.
Falls nein, wie ist es dann möglich das Ruckeln weg zu bekommen.

Vielen Dank schonmal im Vorraus. Falls Quelltext gebraucht wird kann ich diesen noch nachreichen.

Greetz
LastRide
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 01.08.09 14:01 
Willst du ein Spiel programmieren? Mit richtig vielen Bildern, für die Spielfiguren, Objekte usw.? Dann kommst du mit der Delphi-VCL nicht weit. Für sowas gibt's OpenGL. Da musst du dich estmal einlesen, was aber glücklicherweise recht einfach geht, denn die DelphiGL bietet zahlreiche Tutorials für Einsteiger und fortgeschrittene an. Vor allem das Tutorial 2D dürfte dich besonders interessieren.

Wenn du jetzt die Hände über dem Kopf zusammengeschlagen hast und um die armen Spatzen trauerst, auf die ich eben mit Kanonen geschossen habe, dann könnte dir vielleicht das helfen:

ausblenden Delphi-Quelltext
1:
DoubleBuffered := True;					

:mrgreen:
LastRide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 01.08.09 14:34 
Hi,

Vielen Dank erstmal für die Antwort ;).

Das mit Doublebuffered habe ich schon versucht bringt jedoch recht wenig ;). Es verhindert zwar das flackern des Images jedoch nicht das es fließend abläuft wie ich es mir wünsche ;).

Ein wirkliches Spiel soll es nicht werden aber bis zu 4 Grafiken sollten schon fließend gleichzeitig bewegt werden können ;). Okay dann wende ich mich mal von Andorra ab und gehe hin zu dem von dir vorgeschlagenen OpenGL ich denke das wird mir was bringen ;).

Falls ich dann noch fragen habe werde ich mich hier nocheinmal melden danke ;).

Greetz
LastRide
LastRide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 01.08.09 15:56 
Oha,

Das mit OpenGl wird ja ne richtige Tortur :). Wenn ich mir das 2D-Tutorial nämlich mal angucke habe ich noch nicht verstanden wie ich ne Texture einlade das geht für mich daraus nicht hervor xD. Nachdem ich mir das erste Einsteiger-Tutorial auch noch durchgelesen habe habe ich ja wenigstens schonmal geschaft die Komponente zum Laufen zu bringen aber weiter bin ich noch lange nicht.

Vllt. kann mir ja mal jemand einen kurzen Einstieg geben wie ich diese Texture wirklich einladen und darstellen kann wäre sehr sehr sehr nett.

Greetz
LastRide
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 01.08.09 16:04 
user profile iconLastRide hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mir das 2D-Tutorial nämlich mal angucke habe ich noch nicht verstanden wie ich ne Texture einlade

Gibt doch ein eigenes Kapitel darüber: Textur laden ;)

Dort wird die Unit Textures.pas verwendet, die sich im Download des Tutorials befindet.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Sa 01.08.09 16:15 
Also OpenGL lern ich auch grade, ist auf alle Fälle ein nettes Spielzeug und allemal einen versuch Wert... allerdings muss ich einschränken dass trotz der guten Tuts man als Anfänger sich hier und dort ganz schön durchbeißen muss...

Wenn es allerdings nur um 4 Grafiken geht müsste das sich auch mit Hausmitteln bewerkstelligen lassen... beschreibe doch mal ganz genau was du machen wills (Andorra2D sagt mir leider nix).

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
LastRide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 01.08.09 16:23 
Okay,

was ich machen will ist folgendes:

Ich habe 4 Kleine Grafiken ca.200x50 px die als png vorliegen und unterschiedliche Transparenzstufen haben, nicht untereinander sondern in einer Grafik. Die sollen bei MouseOver ganz einfach am Linken Bildschirmrand reingleiten. Was aber doch recht Performance lastig scheint wenn man einfach das Image über einen Timer verschiebt. Wobei noch zu sagen ist das ich fürs Rausgleiten einen Timer und fürs Reingleiten einen eigenen Timer verwende.

Vllt. gibt es da Tricks und Kniffe aber ich kenne sie nicht :D

Greetz
LastRide
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Sa 01.08.09 16:40 
Timer sind einfach relativ lahm. Probier mal zum Test eine Abrrechbare For-Schleife:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
  n: Integer;
begin
  for n := 1 to 1000 do
    begin
      application.ProcessMessages;
      panel1.left := n;
      if application.Terminated  then break;
    end;
end;


(panel1 ist natürlich ein Placebo für dein Image)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
LastRide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 01.08.09 17:11 
Meinst du nicht das die For Schleife das Image viel zu schnell verschiebt ??

Greetz
LastRide

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Okay sie ist nicht zu schnell. ;) Super Idee funktioniert soweit ganz gut.

Nur einen Nachteil habe ich noch denn das Image wandert erst bis zur Endposition bevor es wieder einfährt obwohl die Maus schon vorher vom Image genommen wurde.

Greetz
LastRide

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Keiner Eine Idee wie man das hin bekommen könnte?

Greetz
LastRide
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Sa 01.08.09 23:34 
Ich hab keine Ahnung welche Delphi-Version du hast, bei mir gibts kein OnMouseOver, daher hier ein Beispiel mit OnEnter und OnLeave. Zum Thema Geschwindigkeit: die hängt vom jeweiligen PC ab. Wenn es langsamer gehen soll kannst du mit Zeitabfragen den Ablauf bremsen, wenn es schneller gehen soll musst du dein Image halt in jedem Schritt um mehr als ein Pixel verschieben.

ausblenden volle Höhe Delphi-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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    procedure Image1MouseEnter(Sender: TObject);
    procedure Image1MouseLeave(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure OnIdle(Sender: TObject; var Done: Boolean);
  end;

var
  Form1: TForm1;
  over: boolean = false;
implementation

{$R *.dfm}


procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean);
begin
  if not over then exit;

  if (panel1.Left < 500then
    begin
      panel1.Left := panel1.Left + 1;
      done := false;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  application.OnIdle := onIdle;
end;

procedure TForm1.Image1MouseEnter(Sender: TObject);
begin
  over := true;
  panel1.Left := -300;
end;

procedure TForm1.Image1MouseLeave(Sender: TObject);
begin
  over := false;
end;

end.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
LastRide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: So 02.08.09 10:28 
Werde Ich mal versuchen ;). Danke.

Ich habe auch nur die Version mit Enter und Leave ;).

Greetz
LastRide