Kollision von Text und Maus
Übersicht

![]() |
Der EisvogelBetreff: Kollision von Text und Maus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
man kann ja mit Hilfe von "ImagesCollide" überprüfen ob sich zwei Bilder berühren. Meine Frage ist, kann man das Ganze auch mit Texten machen, d.h. wenn man mit "Print" Text auf den Bildschirm bringt und die Maus darüber fährt etwas passiert, z.B. der Text gröser wird oder die Farbe ändert. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also erstmal benutze nicht ql:Print, sondern ql:Text, da Print nur fürs debuging und für wenige spezielle Sachen gut ist. Hast du nun mit Text dein Inhalt ausgegeben, kannst du per z.B. ql:Stringwidth die Textbreite in Pixel herausfinden. Mit den Daten kannst du dann per ql:RectsOverlap eine Kollision machen. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Print ist vorweg schonmal böse.
Dient nur zu Debugzwecken. Benutze Text. Also: Ein Standardtext hat c.a. 12Pixel in der Länge. Nun, du musst nurnoch wissen, wie breit ein Buchstabe ist. Dann kannst du die Länge des Strings (Mit Len() ermittelt) mit der Breite der Buchstaben multiplizieren. So, nun hasst du Höhe und Breite des Textes. Nun ermittelst du ob die Mauskoordinaten sich zwischen dem 0,0-Punkt des Textes und dem Maximalenbreite,0 Punkt befindet UND ob das gleiche mit Y ist. Wenn ja weisst du, dass die Maus den Text berührt. Hättest du auch selber mit denken lösen können. EDIT: Hectic hat die bessere Variante. |
||
![]() |
Baschdi |
![]() Antworten mit Zitat ![]() |
---|---|---|
mach ein bild auf dem text ist und dann imagescollide
ODER mach ein fake rechteck also folgendes Code: [AUSKLAPPEN] SetBuffer BackBuffer() Global x=10,y=10,txt$="kein overlap",mx,my Repeat Cls mx=MouseX() my=MouseY() Color 255,255,0 Rect mx,my,5,5,1 Text x,y,txt If RectsOverlap(mx,my,1,1,x,y,Len(txt)*8,15) Then: txt="ein overlap" Else: txt="kein overlap" EndIf Flip Until KeyHit(1) End den code müsste man noch verfeinern |
||
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
The_Nici hat folgendes geschrieben:
Zitat: Hättest du auch selber mit denken lösen können.
Das das was du gemeint hast wusste ich schon, aber das wäre auf die Dauer zu aufwendig gewesen. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
BigMaexle |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tja, Programmieren ist nunmal aufwendig. ![]() Außerdem ist die Methode überhaupt nicht aufwendig. Die gesamte Berechnung von Nici lässt sich in 1 Zeile Code zusammenfassen. |
||
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber |
![]() |
blitzuser34 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 320,240,32,2
SetBuffer BackBuffer() While Not KeyHit(1) Cls frame=MilliSecs()-time fps=1000/frame Text 0,0,"FPS: "+fps time=MilliSecs() Text1$="Bitte mit der Maus darüber fahren..." If MouseX()>20 And MouseX()<308 Then If MouseY()>20 And MouseY()<35 Then Text1$="Maus ist auf dem ursprünglichen Text" EndIf EndIf Rect 20,20,288,15,0 Text 20,20,Text1$ Flip Wend End ^^ohne Imagescollide Zitat: EDIT: Hectic hat die bessere Variante.
Edit: Warum soll Rectsoverlap besser sein?????????? |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil man dafür nicht so ne grosse Abfrage braucht, sondern das in einem Befehl hat.
Ausserdem musst du nicht das posten, was ich schon gepostet habe. Das Problem ist schon lange gelöst. Wenn du Aufmerksamkeit brauchst dann lass Feuerwerk los. |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum immer mit Len die länge auslesen und danach multiplizieren, einfacher als mit StringWidth und Stringheight geht es doch gar nicht, und so hat man direkt die wirkliche Breite und Höhe.
Also was du brauchst sind ja zum einen die x und y Koordinaten, wo der Text sich befindet und die Breite und Höhe, daraus kannst u dann ne Mausabfrage formen. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
blitzuser34 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@The_Nici: Soll ich jetzt in Zukunft immer fragen, wenn ich den Denkansatz anderer Leute in Code umsetzte, oder was? Soweit ich weiß, ist das nich verboten, wenn die Idee schonmal genannt wurde, und ich damit einen Code schreibe. Oder ist der (C)?????
Zitat: Weil man dafür nicht so ne grosse Abfrage braucht, sondern das in einem Befehl hat.
Wer schlägt denn hier vor, nich mit Stringwidth zu arbeiten und stadtdessen irgendwas zu multiplizieren. Das geht doch mit Stringwidth mit einem Befehl ![]() Wegen Feuerwerk: Hab ich an Silvester schon ![]() Edit: Wenn es dir um die Länge geht: Code: [AUSKLAPPEN] If MouseX()>20 And MouseX()<308 And MouseY()>20 And MouseY()<35 Then Text1$="Maus ist auf dem ursprünglichen Text" Ist jetzt genau so lang wie Imagescollide. Und wenn es dann doch ein paar Zeilen länger wird, ist das dann auch kein Weltuntergang. @skey-z: Ich kapier des auch nich, warum man des multiplizieren soll, zumal des bei ungleichlangen Zeichen nich stimmt. |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab ja gesagt dass Hectics Variante besser ist, und da das Problem schon gelöst ist musst du nicht noch eine Woche später mit einem Code angekrochen kommen, bei dem nichts anderes steht ey.
Oh, ich muss ja nooboverpwnisch schreiben: WAAAARUMMMMM MAAACHST DU DAAAAAAAS????????????????????? ![]() ![]() ![]() ![]() ![]() ![]() Ey echt, es pisst mich so an, wenn Leute wie du mit Blitzbase-Artikeln um sich werfen, um kleine Anfänger zu beeindrucken. |
||
![]() |
blitzuser34 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was heißt hier "Leute wie du"? Hast du irgend ein Problem mit mir oder so?
Zitat: Ey echt, es pisst mich so an...
Stell dir vor, es gibt leute, die haben Berufe, die man "Psychater" nennt, und die würden dir sicher gern helfen. Ne jetzt mal im ernst: Was hast du überhaupt für ein Problem? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
~GESCHLOSSEN~ Dieser Thread artete in eine sinnlose Beleidigungsorgie aus und wurde daher geschlossen. Verwarnung an The_nici geht raus. Ich werde desweiteren intern beraten ob wir es nur bei einer Verwarnung belassen da Du im Chat zugegeben hast die Verwarnung bewusst mit ins Kalkül bezogen zu haben. Wenn Du dich nicht beherrschen kannst geh woanders Spielen, Junge. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group