Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 07.12.15 20:41 
Hallo!

Zuerst: Der Code stammt nicht von mir, aber der Autor erlaubt es, seinen Code zu verändern. Also habe ich mir vorgenommen, den Figuren einen 3D-Look zu verpassen. Leider scheitere ich da kläglich: Alles, was ich mit LineTo und MoveTo erhalte, sind Linien, die sich langsam, Pixel für Pixel nach unten bewegen, noch dazu auf dem Hintergrund, ausserhalb der Figur und dabei zu einem Balken werden!

Wie muss ich den folgenden Code abändern, um ein Ergebnis wie in der rechten Hälfte von Grafik Tetris.jpg zu erhalten? Könntet ihr mir da helfen?

ausblenden 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:
procedure TKozyTetris.DrawPieceTo(Canvas: TCanvas; X, Y: Integer; Piece: TPiece; Erase: Boolean);
var R: TRect;
  I, J: Integer;
  P: TPiece;
begin
  if not Assigned(Piece) then
    Exit;

  P := Piece;

  for I := 1 to P.PieceSize do
    for J := 1 to P.PieceSize do
      if P.Matrix[I, J] then
        begin
          R := Rect(
            (X + I - 2) * FBlockSize + 1,
            (Y + J - 2) * FBlockSize + 1,
            (X + I - 1) * FBlockSize,
            (Y + J - 1) * FBlockSize);

          with Canvas do
            begin
              if Erase then
                Brush.Color := FColor else
                Brush.Color := P.PieceColor;

              FillRect(R);
            end;
        end;
end;
Einloggen, um Attachments anzusehen!
_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: Mo 07.12.15 22:17 
Nur mal so als Ideen-Anschub (zeichnet links oben einen grauen Schatten):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  with Canvas do
    begin
      Brush.Color := clRed;
      FillRect(R);
      Pen.Color:=clSilver;
      // senkrechte Linie
      MoveTo((X + I - 2) * FBlockSize + 1, (Y + J - 2) * FBlockSize + 1);
      LineTo((X + I - 2) * FBlockSize + 1, (Y + J - 1) * FBlockSize);
      // waagerechte Linie
      MoveTo((X + I - 2) * FBlockSize + 1, (Y + J - 2) * FBlockSize + 1);
      LineTo((X + I - 1) * FBlockSize, (Y + J - 2) * FBlockSize + 1);
    end;

Etwas professioneller könnte man statt clSilver die Piece-Farbe nehmen, in RGB zerlegen, diese Anteile (prozentual) etwas verringern (dunkler) oder erhöhen (heller) und dann wieder zu einer Farbe zusammensetzen.

ub60

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 08.12.15 10:05 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Etwas professioneller könnte man statt clSilver die Piece-Farbe nehmen, in RGB zerlegen, diese Anteile (prozentual) etwas verringern (dunkler) oder erhöhen (heller) und dann wieder zu einer Farbe zusammensetzen.

Ist alles bereits umgesetzt und sieht sehr gut aus!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!