Transparentes Rechteck
Übersicht

![]() |
Xaymarehemals "Cgamer"Betreff: Transparentes Rechteck |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Dieser Code ist aus langeweile entstanden. Er zeichnet ein Transparent Rechteck(alpha# = 0.0 - 1.0). Code: [AUSKLAPPEN] Function Rect2(X, Y, W, H, A# = .5, Sub = 0)
R2 = ColorRed() G2 = ColorGreen() B2 = ColorBlue() W2 = GraphicsWidth() H2 = GraphicsHeight() If Sub = 0 If R2 = 0 And G2 = 0 And B2 = 0 Return 0 Else For X5 = 0 To W-1 : For Y5 = 0 To H-1 RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1 If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1 If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1 If R3 > 255 R3 = 255 If G3 > 255 G3 = 255 If B3 > 255 B3 = 255 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Next : Next EndIf Else For X5 = 0 To W-1 : For Y5 = 0 To H-1 RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) R3 = R1 - (R2 * A#) G3 = G1 - (G2 * A#) B3 = B1 - (B2 * A#) If R3 < 0 R3 = 0 If G3 < 0 G3 = 0 If B3 < 0 B3 = 0 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Next : Next EndIf End Function Beschreibung: X, Y - Wer weiß das nicht? W, H - Width, Height A# - Alpha# Sub - Color1 - (Color2 * A#) falls auf 1 gesetzt sonst Color1 + (Color2 * A#) (Berechnung) Beispielcode: Code: [AUSKLAPPEN] Function Rect2(X, Y, W, H, A# = .5, Sub = 0)
R2 = ColorRed() G2 = ColorGreen() B2 = ColorBlue() W2 = GraphicsWidth() H2 = GraphicsHeight() If Sub = 0 If R2 = 0 And G2 = 0 And B2 = 0 Return 0 Else For X5 = 0 To W-1 : For Y5 = 0 To H-1 RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1 If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1 If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1 If R3 > 255 R3 = 255 If G3 > 255 G3 = 255 If B3 > 255 B3 = 255 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Next : Next EndIf Else For X5 = 0 To W-1 : For Y5 = 0 To H-1 RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) R3 = R1 - (R2 * A#) G3 = G1 - (G2 * A#) B3 = B1 - (B2 * A#) If R3 < 0 R3 = 0 If G3 < 0 G3 = 0 If B3 < 0 B3 = 0 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Next : Next EndIf End Function Graphics 800, 600, 16, 2 SeedRnd MilliSecs() SetBuffer BackBuffer() Color 255, 0, 0 ClsColor Rand(255), Rand(255), Rand(255) While Not KeyHit(1) Cls Text 0, 100, "Drawing Alphad Rect: " + taken + "MS" msec = MilliSecs() LockBuffer BackBuffer() Color A, 0, 0 Rect2(MouseX()-50, MouseY()-50, 100, 100, .25, T) Rect2(MouseX()-48, MouseY()-48, 96, 75, .25, T) Rect2(MouseX()-46, MouseY()-46, 92, 50, .25, T) Rect2(MouseX()-44, MouseY()-44, 88, 25, .25, T) UnlockBuffer BackBuffer() taken= MilliSecs() - msec If MouseHit(1) T = 1-T a = (A + 1) Mod 256 Flip Wend Läuft bei mir mit ca 40ms(ohne Debugger) Ich weiß, sowas gabs schon. Mfg |
||
Warbseite |
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
40ms ist verdammt lange...
da ist die draw3D von hectic wohl besser aber die idee ansich nicht schlecht.. |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
würde ich eine dll daraus machen würde es mit 0-3ms laufen. Aber ich kann kein c++. bzw ich hab kein programm dafür. außerdem ist meins fully 2D | ||
Warbseite |
Phlox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
...und stürzt ab, wenn man an den oberen Bildschirmrand kommt. Genau. | ||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
mmh, sicher?
bei mir nämlich nicht Und hier nochmal als linie: Code: [AUSKLAPPEN] Function Line2(X, Y, X2, Y2, A# = .5, Sub = 0)
R2 = ColorRed() G2 = ColorGreen() B2 = ColorBlue() W2 = GraphicsWidth() H2 = GraphicsHeight() X3 = X2 - X Y3 = Y2 - Y If X3 > 0 XA = 1 If X3 < 0 XA = -1 If Y3 > 0 YA = 1 If Y3 < 0 YA = -1 If Sub = 0 If R2 = 0 And G2 = 0 And B2 = 0 Return 0 Else If Abs(Y3) < Abs(X3) AddY = -Abs(X3) Delta = 2 * Abs(Y3) CouY = 2 * AddY While X+X5 <> X2 X5 = X5 + XA AddY = AddY + Delta If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1 If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1 If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1 If R3 > 255 R3 = 255 If G3 > 255 G3 = 255 If B3 > 255 B3 = 255 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend Else AddX = -Abs(Y3) Delta = 2 * Abs(X3) CouX = 2 * AddX While Y+Y5 <> Y2 Y5 = Y5 + YA AddX = AddX + Delta If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1 If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1 If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1 If R3 > 255 R3 = 255 If G3 > 255 G3 = 255 If B3 > 255 B3 = 255 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend EndIf EndIf Else If Abs(Y3) < Abs(X3) AddY = -Abs(X3) Delta = 2 * Abs(Y3) CouY = 2 * AddY While X+X5 <> X2 X5 = X5 + XA AddY = AddY + Delta If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) R3 = R1 - (R2 * A#) G3 = G1 - (G2 * A#) B3 = B1 - (B2 * A#) If R3 < 0 R3 = 0 If G3 < 0 G3 = 0 If B3 < 0 B3 = 0 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend Else AddX = -Abs(Y3) Delta = 2 * Abs(X3) CouX = 2 * AddX While Y+Y5 <> Y2 Y5 = Y5 + YA AddX = AddX + Delta If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) R3 = R1 - (R2 * A#) G3 = G1 - (G2 * A#) B3 = B1 - (B2 * A#) If R3 < 0 R3 = 0 If G3 < 0 G3 = 0 If B3 < 0 B3 = 0 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend EndIf EndIf End Function Code: [AUSKLAPPEN] Function Line2(X, Y, X2, Y2, A# = .5, Sub = 0)
R2 = ColorRed() G2 = ColorGreen() B2 = ColorBlue() W2 = GraphicsWidth() H2 = GraphicsHeight() X3 = X2 - X Y3 = Y2 - Y If X3 > 0 XA = 1 If X3 < 0 XA = -1 If Y3 > 0 YA = 1 If Y3 < 0 YA = -1 If Sub = 0 If R2 = 0 And G2 = 0 And B2 = 0 Return 0 Else If Abs(Y3) < Abs(X3) AddY = -Abs(X3) Delta = 2 * Abs(Y3) CouY = 2 * AddY While X+X5 <> X2 X5 = X5 + XA AddY = AddY + Delta If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1 If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1 If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1 If R3 > 255 R3 = 255 If G3 > 255 G3 = 255 If B3 > 255 B3 = 255 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend Else AddX = -Abs(Y3) Delta = 2 * Abs(X3) CouX = 2 * AddX While Y+Y5 <> Y2 Y5 = Y5 + YA AddX = AddX + Delta If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1 If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1 If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1 If R3 > 255 R3 = 255 If G3 > 255 G3 = 255 If B3 > 255 B3 = 255 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend EndIf EndIf Else If Abs(Y3) < Abs(X3) AddY = -Abs(X3) Delta = 2 * Abs(Y3) CouY = 2 * AddY While X+X5 <> X2 X5 = X5 + XA AddY = AddY + Delta If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) R3 = R1 - (R2 * A#) G3 = G1 - (G2 * A#) B3 = B1 - (B2 * A#) If R3 < 0 R3 = 0 If G3 < 0 G3 = 0 If B3 < 0 B3 = 0 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend Else AddX = -Abs(Y3) Delta = 2 * Abs(X3) CouX = 2 * AddX While Y+Y5 <> Y2 Y5 = Y5 + YA AddX = AddX + Delta If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) R3 = R1 - (R2 * A#) G3 = G1 - (G2 * A#) B3 = B1 - (B2 * A#) If R3 < 0 R3 = 0 If G3 < 0 G3 = 0 If B3 < 0 B3 = 0 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Wend EndIf EndIf End Function Function Rect2(X, Y, W, H, A# = .5, Sub = 0) R2 = ColorRed() G2 = ColorGreen() B2 = ColorBlue() W2 = GraphicsWidth() H2 = GraphicsHeight() If Sub = 0 If R2 = 0 And G2 = 0 And B2 = 0 Return 0 Else For X5 = 0 To W-1 : For Y5 = 0 To H-1 RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1 If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1 If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1 If R3 > 255 R3 = 255 If G3 > 255 G3 = 255 If B3 > 255 B3 = 255 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Next : Next EndIf Else For X5 = 0 To W-1 : For Y5 = 0 To H-1 RGB = ReadPixelFast(X+X5, Y+Y5) R1 = (RGB And $FF0000) / $10000 G1 = (RGB And $FF00) / $100 B1 = (RGB And $FF) R3 = R1 - (R2 * A#) G3 = G1 - (G2 * A#) B3 = B1 - (B2 * A#) If R3 < 0 R3 = 0 If G3 < 0 G3 = 0 If B3 < 0 B3 = 0 RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3 If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0 WritePixelFast X+X5, Y+Y5, RGB EndIf Next : Next EndIf End Function Graphics 800, 600, 16, 2 SetBuffer BackBuffer() Color 128, 128, 128 While Not KeyHit(1) LockBuffer BackBuffer() Rect2(350, 250, 100, 100, .01) Line2(400, 300, 400+Cos(A)*100, 300+Sin(A)*100, .5, 1) Line2(600, 300, 600+Cos(A)*100, 300+Sin(A)*100, .01) A = (A + 1) Mod 360 Line2(400, 300, 400+Cos(A)*100, 300+Sin(A)*100, .5, 1) Line2(600, 300, 600+Cos(A)*100, 300+Sin(A)*100, .01) A = (A + 1) Mod 360 Line2(400, 300, 400+Cos(A)*100, 300+Sin(A)*100, .5, 1) Line2(600, 300, 600+Cos(A)*100, 300+Sin(A)*100, .01) A = (A + 1) Mod 360 UnlockBuffer BackBuffer() Flip Wend |
||
Warbseite |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group