Kollision von Text und Maus

Übersicht BlitzBasic Beginners-Corner

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

Der Eisvogel

Betreff: Kollision von Text und Maus

BeitragDo, Dez 27, 2007 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Dez 27, 2007 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 27, 2007 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 27, 2007 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 27, 2007 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 27, 2007 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja, Programmieren ist nunmal aufwendig. Rolling Eyes

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

BeitragDo, Jan 03, 2008 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jan 03, 2008 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jan 03, 2008 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

blitzuser34

BeitragDo, Jan 03, 2008 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Cool .

Wegen Feuerwerk: Hab ich an Silvester schon Laughing .

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

BeitragDo, Jan 03, 2008 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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????????????????????? Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad

Ey echt, es pisst mich so an, wenn Leute wie du mit Blitzbase-Artikeln um sich werfen, um kleine Anfänger zu beeindrucken.

blitzuser34

BeitragDo, Jan 03, 2008 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

BladeRunner

Moderator

BeitragDo, Jan 03, 2008 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
~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

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group