XOR-DrawingMode in Farbe?

Anfängerfragen zum Programmieren mit PureBasic.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

XOR-DrawingMode in Farbe?

Beitrag von spider84 »

Folgender Code saugt den Formen (hier: Boxen) irgendwie sämtliche Farben heraus. Müsste XOR nicht die Komplementärfarben erzeugen?
Schaffe ich das mit einfachen Mitteln?

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenScreen(640,480,16,"Test")

Repeat
  ExamineKeyboard()
  Delay(5)
  
  ClearScreen(0)
  
  StartDrawing(ScreenOutput())
  DrawingMode(DrawingMode(#PB_2DDrawing_XOr))
  Box(20,20,50,50,RGB(255,0,0))
  Box(30,30,50,50,RGB(0,255,0))
  
  StopDrawing()
  FlipBuffers()

 Until KeyboardPushed(#PB_Key_Escape)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

XOR erzeugt das Bit-Komplementär zu der vorher vorhandenen Farbe,
für die bits die im XOR-Kommando gesetzt sind.

wenn du eine RGB(255,0,0) auf einen Hintergrund XORst,
werden alle bits von RGB(255,0,0), die vorher gesetzt waren, gelöscht, und umgekehrt.

also, wenn du die Komplementärfarbe zu einer vorhandenen Farbe erzeugen willst,
musst du zuerst diese Farbe drawen, und dann mit ALLEN Bits gesetzt drüber drawen.
(code)

wenn du das komplementär zu einer Farbe direkt drawen willst, kannst du auch ( RGB() ! $FFFFFF ) als Farbwert verwenden.

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenScreen(640,480,16,"Test")

Repeat
  ExamineKeyboard()
  Delay(500)
 
  ClearScreen(0)
 
  StartDrawing(ScreenOutput())
  Box(20,20,50,100,RGB(255,0,0))
  Box(70,20,50,100,RGB(0,0,255))
  For n=0 To 39
    Circle(70,70,40-n, RGB(0,128-2*n,0))
  Next

;*************************************  
; jeden zweiten Frame
  B = 1-B
  If B
; eine XOR Box drüberlegen
    DrawingMode(DrawingMode(#PB_2DDrawing_XOr))
    Box(10,70,120,70,RGB(255,255,255))
  EndIf
;*************************************  
 
  StopDrawing()
  FlipBuffers()

 Until KeyboardPushed(#PB_Key_Escape) 
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag von spider84 »

wow, also deine Farbverläufe innerhalb von Formen sind echt schick!

Was XOR betrifft, hab ich glaub verstanden. Könnte ich irgendwie erreichen, dass eine Form nicht mit dem schwarzen Hintergrund, sondern nur mit andern Formen geXORt wird? Aber halt nur wenn es sich über andere bewegt und, dass es an Sonsten eine eigene hübsche Farbe hat?

Beispiel: Breakout/Arcanoid-Spiel bei dem ein bunter Ball nicht die Mauer berührt, sondern drüberfliegt und dabei mit ihr XORt. Er wird nur von den Wänden gehalten
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> dass eine Form nicht mit dem schwarzen Hintergrund, sondern nur mit andern Formen geXORt wird?

nicht ohne unvertretbaren Aufwand.

.... irgendwas funzt da auch nicht wie ich mir das vorgestellt hatte,
ein paar blöde beispiele haben ganz andere Ergebnisse gezeigt als ich haben wollte.

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenScreen(800,600,32,"Test")

Dim colors.l(7,5)
; Farbarray vorab erzeugen, damit es in jedem Frame gleich ist.
  For t=0 To 5
    For n=0 To 7
      colors(n,t) = RGB(Random(255),Random(255),Random(255))
    Next
  Next

MausCol = RGB(Random(255),Random(255),Random(255))

Repeat
  ExamineKeyboard()
  ExamineMouse()
  MX = MouseX() : MY = MouseY()
  ClearScreen($000000)

  StartDrawing(ScreenOutput())
;*** Hintergrund
    For t=0 To 5
      For n=0 To 7
        Box( 25+100*n, 25+100*t, 50, 50, colors(n,t))
      Next
    Next
;*** Maus
    DrawingMode(#PB_2DDrawing_XOr)
    Circle(MX,MY,8,MausCol)
  StopDrawing()
  Delay(1)
  FlipBuffers()

 Until KeyboardPushed(#PB_Key_Escape)
der Mauscursor sollte eigentlich irgendeine beliebige Farbe haben, aber er wird immer weiß und angefressen ist er auch.
kacke.

... naja, viel spaß noch beim rumdaddeln.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag von spider84 »

Danke schonmal!
Ich bastel schon seit einiger Zeit jetzt an einer gescheiten Kollisionserkennung, vlt mach ich mal ein eigenen thread auf...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

vorher mal die forensuche bemühen... /:->
http://www.purebasic.fr/german/viewtopic.php?t=9093
Fragen bite in einem neuen thread...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten