AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Tunneleffekt in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Tunneleffekt in Delphi

Ein Thema von WordsBG · begonnen am 13. Okt 2006 · letzter Beitrag vom 13. Okt 2006
Antwort Antwort
Benutzerbild von WordsBG
WordsBG

Registriert seit: 17. Sep 2005
63 Beiträge
 
Delphi 7 Professional
 
#1

Tunneleffekt in Delphi

  Alt 13. Okt 2006, 15:56
Irgendwie hatte ich mal lust in Delphi was Grafisches zu realisieren und hab mit nem "Tunneleffekt" angefangen, also das es aussieht als würde man durch einen Tunnel fliegen/fahren/laufen.
Das hier kam raus:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Box: TPaintBox; { 600x400 !!}
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Y: Integer;
  buf: TBitmap;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
  X: Integer;
begin
  Y := Y + 5;
  X := Y*3 DIV 2;
  with buf.Canvas do
  begin
    Pen.Color := clWhite;
    Rectangle(0,0,600,400);
    Pen.Color := clBlack;
    Rectangle(300-X,200-Y,300+X,200+Y);
    { Second Box }
    if (Y-100) > 0 then
    begin
      X := (Y-100)*3 DIV 2;
      Rectangle(300-X,200-(Y-100),300+X,200+(Y-100));
    end;
    { /Second Box }
    MoveTo(0,0);
    LineTo(600,400);
    MoveTo(600,0);
    LineTo(0,400);
  end;
  if Y > 200 then
    Y := 100;
  Box.Canvas.Draw(0,0,Buf);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Y := 100;
  buf := Tbitmap.Create;
  buf.Height := 400;
  buf.Width := 600;
end;

end.
Ich wollte nur fragen ob ich es a) noch optimieren kann, b) ob es andere gute Ansätze gäbe (DelphiX hab ich aber keine Lust zu, viel zu Platformspeziefisch), und c) ob jemand ne Idee hat ob es möglich ist Kurven oder sowas einzubauen das es mehr Achterbahnmäßig aussieht.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Tunneleffekt in Delphi

  Alt 13. Okt 2006, 17:05
Zitat von WordsBG:
noch optimieren kann
Ja, kann man.
  • Statt global könntest du die Variablen als Eigenschaften im Private-Abschnitt deklarieren.
  • statt
    Zitat von WordsBG:
    if (Y-100) > 0
    könnte man auch if Y > 100 schreiben.
  • Zitat von WordsBG:
    Rectangle(300-X,200-(Y-100),300+X,200+(Y-100));
    auch hier wird unnötig gerechntet. Besser wäre Rectangle(300-X, 300-Y, 300+X, 100+Y);

Das wären ein paar Optimierungen. Der Geschwindigkeitsvorteil ist nicht so deutlich spürbar, aber er ist vorhanden, wenn auch klein.


Du hast nicht beachtet, dass gleiche Entfernungen in der Ferne kleiner sind als, wenn man direkt davor steht: So dürften sich die kleinen Rechtecke nicht so schnell vergrößern wie die großen. Außerdem sollten die Abstände zwischen den Rechtecken größer sein, wenn sie sich direkt vorm eigenen Auge befinden.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Tunneleffekt in Delphi

  Alt 13. Okt 2006, 17:41
@Cöster: Das sind unnötige 'Optimierungen' die der Compiler eh selbst vornimmt. Wichtiger ist lesbarer Code.

Soweit sieht es sinnvoll aus, wobei das Konstrukt 'a*b div c' generell (also nicht unbedingt in diesem Fall) in 'MulDiv(a,b,c)' angepasst werden sollte. Diese Funktion vermeidet einen 32-bit Überlauf im Zwischenergebnis 'a*b'. Schneller wird das aber nicht, nur sicherer. Wenn Du aber (so wie hier) genau weisst, das a*b stehts < 2^32, dann verwende die einfache Schreibweise.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:26 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