Systemmauszeiger in "OpenScreen" verwenden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
oliXon
Beiträge: 21
Registriert: 19.12.2004 11:35
Wohnort: Freiberg
Kontaktdaten:

Beitrag von oliXon »

Ich hab Solaris gelesen :)

Ich fand das Buch eigentlich Klasse, der Film natürlich auch aber es fehlte vieles (wieso immer im Film) ;)

(Die neue Verfilmung die auch vor kurzen auf Vox kam, ist ja mehr als grausam :( )

und ja misery ist einen der guten Kings :D

Ach ja, wenn man

Code: Alles auswählen

   StartDrawing(ScreenOutput())
   DrawText(60,60,"Flaeche #1")
   DrawText(60,360,"Flaeche #2")
   DrawText(190,60,"Beenden")
   DrawText(500,60,"Flaeche #3")
   DrawText(500,360,"Flaeche #4")         
   StopDrawing()

Löscht, funktioniert die Mausabfrage wunderbar, seltsam.
:: PureBasic v4.02 (Windows - x86)::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

so.. ich hab mal den mausbutton an den anfang der schleife gesetzt.

Code: Alles auswählen

InitSprite() : InitKeyboard()

OpenScreen(640,480,32,"void")

SetClassLong_(ScreenID(),#GCL_HCURSOR,LoadCursor_(0,#IDC_ARROW))

ShowCursor_(1)

CreateSprite(0,640,480,#PB_Sprite_Memory)
StartDrawing(SpriteOutput(0))
For i=0 To 639
   Box(0,i,640,1,RGB(0,50 + ((i * 205) / 639),230))
Next
StopDrawing()

Repeat
   ClearScreen($704020)
   
   ExamineKeyboard()
   
   GetCursorPos_(pt.POINT)

    If GetAsyncKeyState_(#VK_LBUTTON) & $FFFF
       MLB = 1
    Else
       MLB = 0
    EndIf      
   
   StartSpecialFX()
   DisplaySprite(0,0,0)
   
   DisplayRGBFilter(50,50,100,250,50,50,50)
   DisplayRGBFilter(50,350,100,100,50,50,50)
   
   If pt\x >= 180 And pt\x < 460 And pt\y >= 50 And pt\y < 300
      DisplayRGBFilter(180,50,280,250,150,50,50)
      
      If MLB
         End
      EndIf      
   Else
      DisplayRGBFilter(180,50,280,250,50,50,50)
   EndIf
   
   DisplayRGBFilter(490,50,100,250,50,50,50)
   DisplayRGBFilter(490,350,100,100,50,50,50)   
   StopSpecialFX()
   
   StartDrawing(ScreenOutput())
   DrawText(60,60,"Flaeche #1")
   DrawText(60,360,"Flaeche #2")
   DrawText(190,60,"Beenden")
   DrawText(500,60,"Flaeche #3")
   DrawText(500,360,"Flaeche #4")         
   StopDrawing()
   
   FlipBuffers()
Until KeyboardPushed(1)
insgesamt gibts da noch ne menge mehr was ich ändern würde...
angefangen mit GetCursorPos_(pt.POINT), das muss auch ohne API gehen.

grundsätzlich...
könntest du etwas besser erklären, was du alles machen willst?

ach und btw... warum eigentlich den systemmauszeiger?
der ist doch langweilig, außerdem sieht der bei unterschiedlichen leuten auch unterschiedlich aus...

nen mauszeiger selber zu machen ist doch eigentlich wirklich easy,
und für'n fullscreen-game ist ein eigener mauszeiger doch eigentlich ein muss.... ;)


PS:
hatte grad bock, hab mal einen gebastelt... schenk ich dir
Bild
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
oliXon
Beiträge: 21
Registriert: 19.12.2004 11:35
Wohnort: Freiberg
Kontaktdaten:

Beitrag von oliXon »

Nein, das hat schon seine Grund warum ich den systemmauszeiger benutzte ;)

[edit] danke den mauszeiger kann ich vieleicht später mal verwenden ;)

Andere Mauszeiger alternativen sind mir natürlich bekannt ;)

Was ich genau mache ?

Ich will versuchen ein Spiel aus dem Jahre 1997 nachzuprogrammieren, Imperialismus, ich halte mich strickt am original (deswegen Systemmauszeiger). Es ist rundenbasierend daher sicherlich einfacher als ein echtzeit. Grafiken ect. werden vom original benutzt.

und ja ich werde versuchen es besser zu erklären ;)

Eigentlich ist es nur für mich und ein paar Freunde von mir ...

so und jetzt schaue ich mir erstmal den code an ...
:: PureBasic v4.02 (Windows - x86)::
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Es gibt nur einen einzigen triftigen Grund den Systemzeiger zu benutzen und das ist die Maus Beschleunigung. Wenn man z. B. in einem 1024x768 (19'') Screen die Maus von oben/links nach unten rechts bewegen will braucht man fast die Fläche des gesamten Mauspads. Mit den Systemeinstellungen schiebst du die Maus nur etwa einen Zentimeter zur Seite und hast dieselbe Strecke zurückgelegt.

Ich würde immer versuchen PB's interne Bibliothek zu verwenden, schon wegen der Crossplatform-Kompatibilität. Diese Beschleunigung, sofern sie überhaupt nötig ist, muss man dann halt selber programmieren.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
oliXon
Beiträge: 21
Registriert: 19.12.2004 11:35
Wohnort: Freiberg
Kontaktdaten:

Beitrag von oliXon »

Im moment benutzte ich 640x480 da die grafiken nicht größer sind, also ist es besser einen mauszeiger selber zu erstellen ? mh..
:: PureBasic v4.02 (Windows - x86)::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo, sehe ich auch so.

mal dir halt nen mauszeiger, der genauso aussieht wie der systemmauszeiger...

mit den grafiken... grafik zu klaun ist nich legal,
d.h. du kannst dann das fertige game nur im stillen kämmerlein benutzen,
noch nicht mal kostenfrei zum download anbieten.

da wärs vielleicht ne maßnahme, doch eigene grafix zu erstellen,
dann kannst du das game im netz anbieten, und erntest wenigstens noch ruhm.

nir persönlich wär das zuviel aufwand, ein game zu proggen,
das ich nachher nicht weitergeben darf ohne mich strafbar zu machen,
weil die grafix geklaut sind.
da wäre der mehraufwand die grafiken extra zu machen ne angenehmere alternative...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
oliXon
Beiträge: 21
Registriert: 19.12.2004 11:35
Wohnort: Freiberg
Kontaktdaten:

Beitrag von oliXon »

Ist ja auch nur für mich gedacht, außerdem der Herstellter samt Publisher existieren nicht mehr, sonst hätte ich schon mal eine e-mail geschrieben ... ansonsten kann ich später immer noch die grafiken ersetzten.
:: PureBasic v4.02 (Windows - x86)::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok.. später ersetzen is natürlich ne sache.
dann kannst du erstmal mit proggen loslegen, und blockierst dich nicht damit, erst ne menge grafix daddeln zu müssen.

so, und hier ist dein "systemmauszeiger":
Bild
absolut orginal :mrgreen:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
oliXon
Beiträge: 21
Registriert: 19.12.2004 11:35
Wohnort: Freiberg
Kontaktdaten:

Beitrag von oliXon »

Richtig, Grafiken für mich erstellen ist kein Problem bzw, Rendern ;)

Mein eigener "systemmauszeiger" *gerührt* :D

Ich hab da noch was ...

Bild

Wenn ich auf auf das Feld 1 klicke im Hauptmenü und in das 2 Menü komme und in dem 2 Menü "zufällig" an der gleichen stelle auch eine Schaltfläche ist, hat er immer noch den ersten mauszeiger klick und ich lande wieder im Hauptmenü (in bruchteilen einer sekunde)

So befinde ich mich in einer Art schleife Oo.

Grund den ich bis erkannt habe. Solange ich die Maustaste gedrückt halte macht er die aktion, ich bräuchte sozusagen, ein klick und erst wenn ich loslasse und dann wieder klicke soll er darauf reagieren.

Ich hoffe es verständlich genug ansonsten muss ich den code mal posten *g*
:: PureBasic v4.02 (Windows - x86)::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Ich hoffe es verständlich genug

yo, kla... altbekanntes problem.
sowas kann man mit nem doppelten flag lösen.

Code: Alles auswählen

If MouseButton(1) 
  If MLB_act = 0
    MLB_act = 1
    MLB = 1
  Else
    MLB = 0
  EndIf
Else
  MLB_act = 0
EndIf
MLB_act ist das flag, das sich merkt, ob der mousebutton schon im frame vorher gedrückt wurde.
MLB ist nur im allerersten Frame eines clicks gesetzt.

MLB soll MouseLeftButton heißen.
das selbe für MouseButton(2) mit MRB_act und MRB,
und du hast 2 Flags, MLB und MRB, für die aktionen der Buttons.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten