Point fehler ?

Anfängerfragen zum Programmieren mit PureBasic.
pureanfänger
Beiträge: 74
Registriert: 29.03.2008 15:22

Point fehler ?

Beitrag von pureanfänger »

Ich möchte via Point-Funktion die Farbe des unter dem Cursor befindenden Pixels eines Sprites auslesen. (Funktioniert auch soweit)

Sobald ich allerdings an den rechten oder unteren Spriterand komme, stürzt der Compiler immer mit der Fehlermeldung: "Point() is outside of drawing area" ab.

Beispiel:
Spritegröße 50x50 Hier würde der Compiler bei den Koordinaten --x50 oder 50x-- abstürzen.
Was also bedeutet, dass ich die Point-Funktion nur bis zum vorletzten Pixel der X bzw. Y-Achse des Sprites verwenden kann.

Mein Code: Feld_01_X.l und Feld_01_Y.l geben die Spritepositionen an, Feld_01.l ist das Handle des Sprites.

Code: Alles auswählen

     If (MouseX() - Feld_01_X.l) >=0 And (MouseX() - Feld_01_X.l) <= SpriteWidth(Feld_01.l) And (MouseY() - Feld_01_Y.l) >=0 And (MouseY() - Feld_01_Y.l) <= SpriteHeight(Feld_01.l)
       StartDrawing(SpriteOutput(Feld_01.l))  
         Color_01.l = Point(MouseX() - Feld_01_X.l, MouseY() - Feld_01_Y.l)  
       StopDrawing()  
     Else
       Color_01.l - 1
     EndIf 
Liegt jetzt der Fehler bei mir, oder ist die Point-Funktion seid der Version 4.40 fehlerhaft?
Vor vers. 4.40 hat alles einwandfrei funktioniert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Point fehler ?

Beitrag von ts-soft »

Vielleicht geht die Achse von 0 - 49 bei 50 Pixeln?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Point fehler ?

Beitrag von STARGÅTE »

er meinst du sollst aus den <= nur < machen !

Code: Alles auswählen

If (MouseX() - Feld_01_X.l) >=0 And (MouseX() - Feld_01_X.l) < SpriteWidth(Feld_01.l) And (MouseY() - Feld_01_Y.l) >=0 And (MouseY() - Feld_01_Y.l) < SpriteHeight(Feld_01.l)
       StartDrawing(SpriteOutput(Feld_01.l))  
         Color_01.l = Point(MouseX() - Feld_01_X.l, MouseY() - Feld_01_Y.l)  
       StopDrawing()  
     Else
       Color_01.l - 1
     EndIf 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Point fehler ?

Beitrag von Kaeru Gaman »

pureanfänger hat geschrieben:Spritegröße 50x50 Hier würde der Compiler bei den Koordinaten --x50 oder 50x-- abstürzen.
Was also bedeutet, dass ich die Point-Funktion nur bis zum vorletzten Pixel der X bzw. Y-Achse des Sprites verwenden kann.
Denkfehler:
0-49 sind 50 Werte, die 50 ist außerhalb.

mal grundsätzlich merken, trifft nämlich auf JEDE Matrix zu.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
pureanfänger
Beiträge: 74
Registriert: 29.03.2008 15:22

Re: Point fehler ?

Beitrag von pureanfänger »

Ich bin aber auch ein trottel ... ist ja logisch mit der 0-49 = 50 pixel.

Danke für eure Antworten, und noch einen guten Rutsch ins neue Jahr ;-)
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Point fehler ?

Beitrag von TomS »

pureanfänger hat geschrieben:ist ja logisch mit der 0-49 = 50 pixel.
Nicht wirklich.
Bei jedem Grafikprogramm, das ich kenne, ist der Pixel Links-Oben 1/1 und nicht 0/0. Das gleicht gilt für Desktop, 2D-Screen und jede HTML-Render-Engine^^

//Edit: Blödsinn^^ Einfach ignorieren -.-
Zuletzt geändert von TomS am 30.12.2009 14:33, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Point fehler ?

Beitrag von ts-soft »

TomS hat geschrieben:
pureanfänger hat geschrieben:ist ja logisch mit der 0-49 = 50 pixel.
Nicht wirklich.
Bei jedem Grafikprogramm, das ich kenne, ist der Pixel Links-Oben 1/1 und nicht 0/0. Das gleicht gilt für Desktop, 2D-Screen und jede HTML-Render-Engine^^
Beim programmieren beginnt jeder index bei 0, dies ist jedenfalls der standard seit das programmieren erfunden wurde :wink:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Point fehler ?

Beitrag von Kaeru Gaman »

TomS hat geschrieben:
pureanfänger hat geschrieben:ist ja logisch mit der 0-49 = 50 pixel.
Nicht wirklich.
Bei jedem Grafikprogramm, das ich kenne, ist der Pixel Links-Oben 1/1 und nicht 0/0. Das gleicht gilt für Desktop, 2D-Screen und jede HTML-Render-Engine^^
bei Paint ist links oben die 0/0, bei PhotoFiltre auch.
beim Desktop erstrecht und beim 2D Screen ebenfalls.

... also, ich weiß nicht welche Anwendungen du meinst, aber das ist eher die absolute Ausnahme.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Point fehler ?

Beitrag von TomS »

:oops:
Ich plapper wieder wirres Zeug.
Sind ja immer Offsets zum Rand^^
Antworten