Bild verändern wenn Maus drüber fährt?!? Bitte um Hilfe!
Übersicht BlitzBasic Beginners-Corner
powerfritzBetreff: Bild verändern wenn Maus drüber fährt?!? Bitte um Hilfe! |
So, Jun 03, 2007 16:10 Antworten mit Zitat |
|
---|---|---|
Hi,
bin noch sehr neu (sowohl im Forum als auch BB), und ich habe gestern begonnen ein Menü für unser Spiel zu machen. Hintergrundbild und Buttons hab ich schon (Musik auch). Nun meine Frage: Wie kann ich nun machen, dass wenn die Maus über einen bestmimten Button (z.B. dem "Spiel Starten"-Bild) drüberfährt, eine andere Textur geladen wird, nud wenn man wieder wegfährt, wieder die alte erscheint? Also einfach so ein aufleuchteffekt beim drüberfahren (die anderen texturen hab ich schon)... Dann noch eine Frage: Wie kann ich den alternativen Windows-Mauszeiger abschalten? Denn wenn ich mit so einem Code mache, dass eine bestimmte Textur die Maus verfolgt, sieht das ziemlich blöd aus, wenn sowohl Windows-Maus als auch eigene Maus da sind... Bin für jede Hilfe dankbar! |
||
Christoph |
So, Jun 03, 2007 16:18 Antworten mit Zitat |
|
---|---|---|
ql:hidepointer
zu deiner ersten Frage: 1. man muss wissen, wo das bild ist (x|y) 2. man muss wissen, wie breit|hoch das bild ist (ql:imagewidth|ql:imageheight) 3. man muss wissen, wo die maus gerade ist (ql:mousex|ql:mousey) Dann kannst du durch eine einfache If-Then-Else Struktur deine (natürlich vorher mit ql:loadimage geladenen) Bilder dementsprechend mit ql:drawimage einzeichnen |
||
powerfritz |
So, Jun 03, 2007 16:28 Antworten mit Zitat |
|
---|---|---|
ok, .. bild is bei 400|400, breite/höhe: 300|35, und was meinst du wo maus gerade ist?
und wie würde diese bedingung ungefähr aussehen? Ich kann mir irgendwie nix vorstellen? etwas mit If ??? Then Delete altevar And DrawImage neuevar oder so?? |
||
pile |
So, Jun 03, 2007 16:47 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] If MouseX()>=400 and MouseX()<=800 and MouseY()>300 and MouseY()<=335 [b]then[/b] Drawimage Pic2,400,300
So ungefähr, du mußt es natürlich an deinen Code anpassen. |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
Smily |
So, Jun 03, 2007 16:49 Antworten mit Zitat |
|
---|---|---|
mousex() x-koordinate der maus
mousey() y-koordinate der maus also: - Du weist, wo dein Bild ist - Du weist, wo die Maus ist - Du kennst die Abmessungen des Bildes. Du willst folgendes: Code: [AUSKLAPPEN] WENN [maus innerhalb des bildes] DANN
[Anderes Bild zeichnen] SONST [Bild Zeichnen] hilft dir das weiter? Edit: Pile war schneller ^^ |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
pile |
So, Jun 03, 2007 16:56 Antworten mit Zitat |
|
---|---|---|
Sollten andere in meinen Code auch das "then" auch mit diesem b in eckigen Klammern sehen können, das war nicht meine Absicht, das Wort sollte einfach nur fett geschrieben werden. ALso bitte den Code ohne die b in den Klammern verwenden. | ||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
powerfritz |
So, Jun 03, 2007 17:11 Antworten mit Zitat |
|
---|---|---|
So, VIELEN DANK für die Hilfe, aber irgendwie scheint da was nicht zu funktionieren!
Ich habe folgenden Code eingefügt, trotzdem ändert sich nichts wenn ich über das Bild fahre: Code: [AUSKLAPPEN] If MouseX()>=400 And MouseX()<=800 And MouseY()>=300 And MouseY()<=335 Then DrawImage (pic2,400,400, 0)
Davor habe ich die anderen DrawImage Befehle der Buttons usw. Gehört die der If Code vl. außerhalb dem Graphics Modus oder so? Jedenfalls funzts i-wie noch ned... [/code] |
||
darth |
So, Jun 03, 2007 17:26 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] dim bild(1)
bild(0)=loadimage("bild1.jpg") bild(1)=loadimage("bild2.jpg") while not keyhit(1) drawpicture bild(rectsoverlap(mousex(),mousey(),1,1,x,y,imagewidth(bild(rand(0,1))),imageheight(bild(rand(0,1))))),x,y flip 0 : cls wend : end das absolut genialste |
||
Diese Signatur ist leer. |
powerfritz |
So, Jun 03, 2007 17:34 Antworten mit Zitat |
|
---|---|---|
nochmals thx, aber irgendwie funzt deiner ned so^^
achja und, ich habs jetzt geschafft dass das bild aufleuchtet, aber jetzt schaff ichs ned dass es wieder normal wird. ich hab zwar "Else DrawImage pic1,400,400,0 gemacht, scheint aber immer noch ned so ganz zu klapenn |
||
BladeRunnerModerator |
So, Jun 03, 2007 17:43 Antworten mit Zitat |
|
---|---|---|
Poste doch bitte mal Deinen gesamten Code den Du bislang dafür hast. | ||
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 |
powerfritz |
So, Jun 03, 2007 17:57 Antworten mit Zitat |
|
---|---|---|
ok.. möchte aber noch anmerken, dass ich das mim leuchten irgendwie mit einer repeat schleief und der if bedingung hinbekommen habe^^ naja egal..
Code: [AUSKLAPPEN] ;Variablen
Global cursor Global feldleer1 Global feldleer1_2 Global feldleer2 Global feldleer2_2 Global feldleer3 Global feldleer3_2 Global XFiles hintergrundmusik = LoadSound("X-Files Theme.mp3") ;Hintergrundmusik channel = PlaySound(hintergrundmusik) Graphics 1024, 768 feldleer1 = LoadImage("feldleer1.png") ;diese komischen feldleers sind die menübuttons feldleer1_2 = LoadImage("feldleer1_2.png") feldleer2 = LoadImage("feldleer2.png") feldleer2_2 = LoadImage("feldleer2_2.png") feldleer3 = LoadImage("feldleer3.png") feldleer3_2 = LoadImage("feldleer3_2.png") ;Mauszeigercode in Kommentare gesetzt, da er irgendwie ned ganz funzt ;SetBuffer BackBuffer() ;fuellercursor=LoadImage("cursor.png") ;While Not KeyHit(1) ;Cls ;DrawImage cursor,MouseX(),MouseY() ;Flip ;Wend hintergrundbild = LoadImage("world1.png") ;Hintergrundbild TileImage hintergrundbild, 0, 0 XFiles = LoadFont("X-Files", 10, 1, 0, 0) ;Schriftart SetFont XFiles Locate 885, 730 Print "made by ..." DrawImage (feldleer1, 400, 400, 0) ;Die Menübuttons DrawImage (feldleer2, 400, 450, 0) DrawImage (feldleer3, 400, 500, 0) Repeat DrawImage feldleer1,400,400,0 Until MouseX()>=400 And MouseX()<=800 And MouseY()>=400 And MouseY()<=435 ;der seltsame code ders irgendwie zum leuchten bringt^^ If MouseX()>=400 And MouseX()<=800 And MouseY()>=400 And MouseY()<=435 Then DrawImage feldleer1_2,400,400,0 Else DrawImage (feldleer1,400,400,0) Repeat DrawImage feldleer2,400,450,0 Until MouseX()>=400 And MouseX()<=800 And MouseY()>=450 And MouseY()<=485 If MouseX()>=400 And MouseX()<=800 And MouseY()>=450 And MouseY()<=485 Then DrawImage feldleer2_2,400,450,0 Else DrawImage (feldleer2,400,450,0) Repeat DrawImage feldleer3,400,500,0 Until MouseX()>=400 And MouseX()<=800 And MouseY()>=500 And MouseY()<=535 If MouseX()>=400 And MouseX()<=800 And MouseY()>=500 And MouseY()<=535 Then DrawImage feldleer3_2,400,500,0 Else DrawImage (feldleer3,400,500,0) WaitKey End Hoffe ihr verstehts ihn? edit: mit den repeat schleifen gehts zwar, aber dafür muss zuerst das erste bild mal aufgeblinkt sein, bis das 2. aufblinken kann... ich sollte die schleifen wohl rausgeben^^ |
||
BladeRunnerModerator |
So, Jun 03, 2007 18:23 Antworten mit Zitat |
|
---|---|---|
Der Code kann so nicht funktionieren. Versuch Dir selbst vor Augen zu führen was er macht: Du malst einmal die drei buttons. Dann wiederholt das Programm solange den Zeichnen-Befehl des ersten Buttons bis du drüber bist.
DANACH wiederholt des solange den Zeichnen-Befehl für den zweiten button etc. Zu Beginn deines Programmes hast Du eigentlich die Lösung stehen, nur leider auskommentiert. Da gibt es die Hauptschleife, in der der cursor gezeichnet wird. In dieser Hauptschleife muss ALLES an Zeichenlogik stehen, und zwar in der Zeihenfolge wie es gezeichnet werden soll. (Spich: der Mauszeiger zuletzt, da er ja zuoberst sein soll.) In dieser Hauptschleife musst du auch mittels if-then prüfen ob ein Bild zu zeichnen ist oder nicht. Es bedarf keiner weiteren Schleife darin. Dadurch dass die Hauptschleife zig mal in der Sekunde läuft wird das Bild schon korrekt gezeichnet. |
||
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 |
pile |
So, Jun 03, 2007 18:29 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] DrawImage (pic2,400,400, 0)
wußte gar nicht das man das auch so schreiben kann, ist das nicht umständlicher weil man da immer die Klammern setzen muss? |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
The_Nici |
So, Jun 03, 2007 19:01 Antworten mit Zitat |
|
---|---|---|
Vielleicht wäre es hilfreich, die Abfrage in eine Schleife zu packen. | ||
Lador |
So, Jun 03, 2007 20:57 Antworten mit Zitat |
|
---|---|---|
Hi, ich habs immer so gemacht (hat man dir schon fast alles so gesagt):
Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() ;Bilder laden etc. Repeat Cls ;Bilder zeichnen mx = MouseX() my = MouseY() If mx > 400 And mx < 600 And my > 100 And my < 150 Then DrawImage bild2, 400,100 Else DrawImage bild1, 400,100 Endif ;Dann machste desselbe mit den andren 2 Buttons Flip Until KeyDown(KEY_ESCAPE) End Man könnte auch ne Function machen, dann müssen mx und my aber global sein! zb so: Code: [AUSKLAPPEN] Function button_zeichnen (bild1, bild2, x, y, breite, hoehe)
mx = MouseX() my = MouseY() If mx > x And mx < x+breite And my > y And my < y+hoehe Then DrawImage bild2, x, y Else DrawImage bild1, x, y EndIf End Function Verwendung, zb: Code: [AUSKLAPPEN] ...
button_zeichnen (button1, button2, 400, 100, 300, 150) Ich hoffe mal des funzelt und alle Fragen sind beantwortet^^. |
||
powerfritz |
So, Jun 03, 2007 21:27 Antworten mit Zitat |
|
---|---|---|
Vielen Dank Lador,
dein 1. Code funktioniert zwar, aber 1. irgendwie überfordert er das system und 2.) wie kann man das bei mehreren bildern machen? sponst würdens ja nach wie vor mehrerer repeat schleifen sein... edit: ok hab ich doch hingekriegt, fehlt nur noch die funktion^^ deine funktion funzt irgendwie ned, also ich weiß ned obs funzt, aber er meldet immer das etwas fehlt (also Endif, dann mach ich ein Endif und er will ein if etc.) |
||
BladeRunnerModerator |
Mo, Jun 04, 2007 6:48 Antworten mit Zitat |
|
---|---|---|
Ladors Code funzt einwandfrei, wenn man 2 Dinge weiss:
er benutzt KEY_ESCAPE. Das ist ein Schlüsselwort aus BMax welches so bei BB nicht existiert. Daher kannst Du das Programm nicht wirklich gut abbrechen. Ersetze das mit KEY_ESCAPE durch 1 - dann funktioniert das. zum anderen, und hier wiederhole ich mich: Alle Zeichenbefehle müssen in die selbe Schleife. Selbst Lador schreibt das mit einem Kommentar in dem Code den er dir gab. Eine 2e Repeat ist nicht nötig, denn alle Grafik wird zeitgleich dargestellt, nicht nacheinander. Denk nochmal darüber nach. Was im Code in einzelnen Schleifen getrennt ist wird es auch beim Laufen sein. Was spricht gegen eine zweite if-then in der selben Schleife ? - Eigentlich doch nichts, oder ? Und wenn Du es so machst wird es auch funzen. |
||
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 |
mas93 |
Mo, Jun 04, 2007 8:25 Antworten mit Zitat |
|
---|---|---|
Also Ich mach wahrscheinlich immer die unschoenste weise, dafuer aber einfache^^
-Nimm als maus einfach ein bild und mal das an mousex() und mousey() -Die kollision wuede ich dann mit imagescollide machen also: Code: [AUSKLAPPEN] If images collide(mausbild,mousex(),mousey(),0,button,buttonx,buttony,0)then drawimage overlay,buttonx,buttony (DIE TEXTUR DIE BEI KOLLISION ANGEZEIGT WERDEN SOLL) mfg Marius |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
Lador |
Mo, Jun 04, 2007 14:32 Antworten mit Zitat |
|
---|---|---|
Hi, also mit den Kollisionsbefehlen würde ich das nicht machen, da sie langsamer sind als wenn man es über MouseX() und MouseY() berechnet. Und sorry wegen KEY_ESCAPE, bin seit paar Wochen auf BMax umgestiegen^^.
MFG Lador |
||
Rongo Matane |
Mo, Jun 04, 2007 14:36 Antworten mit Zitat |
|
---|---|---|
mas93 hat Folgendes geschrieben: Also Ich mach wahrscheinlich immer die unschoenste weise, dafuer aber einfache^^
-Nimm als maus einfach ein bild und mal das an mousex() und mousey() -Die kollision wuede ich dann mit imagescollide machen also: Code: [AUSKLAPPEN] If images collide(mausbild,mousex(),mousey(),0,button,buttonx,buttony,0)then drawimage overlay,buttonx,buttony (DIE TEXTUR DIE BEI KOLLISION ANGEZEIGT WERDEN SOLL) mfg Marius das is aber keine tolle Lösung, finde ich zumindest. Da gibts auch Kollisionen wenn der Mauszeiger garnicht richtig drauf ist, sprich zB mit der unteren Rechten Kante, die andere Lösung mit dem mousex(),mousey,1,1 und rectsoverlap is da genauer. Und schneller, denk ich^^ |
||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group