Bildkoordinaten f?r Mauszeiger zum Draufklicken... wie?

Previous topic - Next topic

Metamorphose

Moin!
Ich will ein bild auf dem schirm haben, und wenn man mit der maus auf das bild klickt (auf das ganze), dann soll der text "hallo!" kommen.
nun weiss ich aber nur, wie ich die bildkoordinaten tempor?r speichere und dann mit den mauskoordinaten ?berpr?fe. das wird nat?rlich nur die linke obere ecke sein, ich will aber das man auf das ganze bild klickt.
hab ich da was ?bersehen? muss ich da irgendeine berechnung machen? geht das ganze nicht dynamisch?
mein code:

Code (glbasic) Select
LOADFONT "Media/font.png", 1
SYSTEMPOINTER TRUE
bx=100;by=100
LOADSPRITE "Media/1.bmp", 1
SETFONT 1

WHILE TRUE

  MOUSESTATE mx, my, b1, b2
  DRAWSPRITE 1, bx, by
  PRINT mx + ":" + my + ":"+b1+":"+b2, 300, 300
  IF mx=bx AND my=by AND b1=1 THEN PRINT "hallo!", 200, 200
  SHOWSCREEN
 
WEND


Die Frage brennt mir schon lange auf dem herzen. Auch in anbetracht (eventuell 2. frage, wenn sich der jemand annimmt) wie man variabel abfr?gt, ob das einte sprite das andere sprite ber?hrt... also ein if sprite1 col sprite2 then... ohne pixelangabe (nur beispielcode). gibts das in glbasic oder muss man das selbst schreiben?
Die erste frage brennt mehr ;) die zweite ist nur da ich hier schreibe aufgetaucht. beim dungeon runner (mein erstes spiel) habe ich deshalb feste schritte eingebaut und die jedesmal abgefragt. sprcoll ist ja auch mit koordinateneingabe.

gr?sse und schonmal danke an die nette community :)
lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

Schranz0r



1:

Code (glbasic) Select

// mach den Mauszeiger sichtbar
SYSTEMPOINTER TRUE


WHILE TRUE

// Mausvariablen
LOCAL mx,my,b1,b2
MOUSESTATE mx,my,b1,b2

// Bildvariablen bx,by ist klar denk ich
// bb = bildbreite
// bh = bildh?he
LOCAL bx=40,by=50,bb=200,bh=40

// hier ein Rect statt nem Image
// f?r ein Bild siehe GETSPRITESIZE !
DRAWRECT bx,by,bb,bh, RGB(0xff, 0x00, 0x00)


// Ist der Zeiger innerhalb des Feldes/Bildes
IF mx > bx AND mx < bx+bb AND my > by AND my < by+bh
// ist maus gedr?ckt dann sag was
IF b1 THEN PRINT "HALLO WELT!",10,10
ENDIF

SHOWSCREEN
WEND
END



2:

Code (glbasic) Select
col = SPRCOLL(bild_id1, x1, y1, bild_id2, x2, y2)

Fragen beantwortet?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Metamorphose

ich denke das erste ist klar.
aber bei sprcoll muss man ja trotzdem die pixel angeben. ich meine zB mach random 20 gegner auf den bildschirm und lese mit einem befehl die koordinaten aller 20 gegner heraus, wenns mit held koolidiert. denk ich da falsch? ich hab vorher mit einem basic gearbeitet (glaube blitz), da konnte man einfach if coll sprite1=sprite2 then print "kollidierung" . ohne koordinaten. wie kann man das dynamisch machen? sonst m?sste man ja jeden gegner einzeln setzen (gegner1x=100, gegner1y=100, gegner2x=200, gegner2y=100, gegner3x=300, gegner3y=100) und einzeln abfragen (col = SPRCOLL(held_id1, heldx1, heldy1, gegner_id2, gegner1x, gegner1y)) oder das irgendwie mit for...to l?sen.
muss man jetzt nicht alles mit beispielcodes aufzeigen, das w?r zuviel verlangt. aber gibts nen gutes tut oder beispielcode daf?r?
lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

Schranz0r

Hi.

Also entweder du nimmst SPRCOLL was Pixelgenau ist, aber auch ein Performence schlucker ist, dann kannst du machen SPRCOLL(Held,Gegner).

Oder du benutzt TYPES und packst die gegner darein.
Keine Ahnung ob du bei Blitz die Types schon verwendet hast?
Wenn ja dann sind die mit sicherheit die bessere und schnellere L?sung.

Wenn du gerne mal nen Codeschnipsel haben willst, der dir zeigt wie Types funktionieren dann sag einfach bescheid, macht bestimmt einer ne kleine Einf?hrung :)

Evtl hilft das schon einwenig?:
http://www.glbasic.com/forum/index.php?topic=2352.0
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Metamorphose

Danke. Ich hab noch nie mit types gearbeitet und es intressiert mich wahnsinnig.
habe in der glbasic hilfe gekuckt und bin nicht draufgestiegen ;) auch dein sehr gutes tutorial stiftet verwirrung.
man m?sste mal in etwa wissen, was types genau sind.
gibts vielleicht eine grundlegendere einf?hrung ohne codes, um types zu begreifen? ich denke types, so wie ich es verstanden habe, sind eine ansammlung von variablen. also type herr hase, name=herr hase, alter=74, gewicht=20kg.
nur kann ich in den types auch if-anweisungen geben? zB wie der pfad des laufens etwa ist? ki?
oder kann ich mit den types einfach nur eigenschaften definieren und die mit einer funktion zB f?rs laufen ver?ndern?
ich f?r meinen fall br?uchte eine nicht unbedingt codespezifische einf?hrung in types, die sie erkl?rt und auch sagt, was man alles reinpacken kann ;) dass man zB verschiedene gegnertypes einfach auf den bildschirm setzen kann und die rumlaufen und bei w?nden stehenbleiben. ist das in der type deklariert oder durch eine funktion die auf die type zugreift?
ich glaub man versteht mein problem ;)
doch ich glaub das ist ein gr?sserer aufwand, weiss nicht ob den jemand macht.
lalagames - www.metamo.ch/lalagames/
Keine K?nstler Online - www.keinekuenstler.ch
M?rchenwelt PNP-RPG - www.metamo.ch/maerchenwelt

Schranz0r

Ich werde mal ein kleines weiteres Grundtutorial machen, das die Types erkl?rt f?r was, wieso, warum und wie man die nutzt :D
Kann aber dauern :/


du kannst klar auch Laufpfade in ein Type packen :)

Du brauchst erstmal ein TYPE Gegner

dieser brauch ein Array vom TYPE Wegpunkt

Also:

TYPE Laufwege
    x;y // position
    speed
ENDTYPE

TYPE Gegner
    name$
    //usw...
    punkte[] AS Wegpunkte
ENDTYPE

jetzt wenn du nen wegpunkt machst dann musst du beim dimpush dann halt machen:
DIMPUSH gegner1.punkte[], punkt

Naja wie auch immer bist du einmal in den Types drin willst nimmer weg davon ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard