Kollision in Types

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

romanski1985

Betreff: Kollision in Types

BeitragDo, Aug 20, 2009 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hello,

Ich habe eine Kollisionsabfrage die ich direkt in eine Type eingebaut habe. Leider funktioniert sie nur ausserhalb der Type aber nicht darin. Warum ist das so? Andere Methoden? So passiert garnichts, nur der Button wird angezeigt aber keine Reaktion:

Type Button

Field x:Int
Field y:Int
Field i:Int
Field img:TImage
Field active:Int
Field action:Int

Function Neu:Button()
Return New Button
End Function

Method Draw()
DrawImage img,x,y

If themouse <> Null Then
If ImagesCollide(img,x,y,0,themouse,MouseX(),MouseY(),0) Then
End
End If
End If


End Method

End Type


und später in der while-wend schleife:

Buttons[1].draw()
 

#Reaper

Newsposter

BeitragDo, Aug 20, 2009 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Verwende den Code-Tag
2. Verwende SuperStrict (?)
3. Trifft 2. nicht bereits zu, liegt es evt. wohl daran, das "themouse" = Null ist.
4. Die Funktion "Neu()" ist irgendwie nicht so sehr sinnvoll.
5. Benenne Types am besten mit einem T am Anfang, also hier TButton, um zu verdeutlichen, dass es sich um ein Type, nicht um ein Objekt handelt.

Smile
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

ComNik

BeitragDo, Aug 20, 2009 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausserdem sollten Threads von nem Mod oder nem Admin verschoben werden und nicht neu erstellt werden. Wie Reaper schon sagte liegt es wahrscheinlich an themouse. Bisschen mehr Code?
lg
ComNik
WIP: Vorx.Engine
 

romanski1985

BeitragDo, Aug 20, 2009 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry ja, hatte keine geduld deswegen hab ich doppelgepostet,ähem...

hier mehr vom code. erst deklariere ich für meine type die anzahl an types: (@reaper wieso ist die neu-funktion sinnlos bzw. wie kann ich sie umgehen?)


code am anfang:
Code: [AUSKLAPPEN]

Global Buttons:Button[Buttonsmax]


the mouse ist einfach nur das image für den mousecursour:
Code: [AUSKLAPPEN]

Local themouse:TImage = LoadImage("media/cursour.png")



das hier ist die funktion um den button zu erstellen und wird irgendwann am anfang des programms aufgerufen:

Code: [AUSKLAPPEN]

Function CreateButton(i:Int,x:Int,y:Int,active:Int,action:Int)

Buttons[i] = Button.Neu()
Buttons[i].x = x
Buttons[i].y = y
Buttons[i].i = i
Buttons[i].active = active
Buttons[i].action = action

Select buttons[i].action

Case 1

Buttons[i].img = LoadImage("media/build.png")

Case 2

Buttons[i].img = LoadImage("media/council.png")

End Select


und das hier ist während der laufzeit:
Code: [AUSKLAPPEN]

      For Local j:Int = 1 To buttonsmax - 1
      If buttons[j] <> Null Then
      Buttons[j].draw()
                End If
      Next
  • Zuletzt bearbeitet von romanski1985 am Do, Aug 20, 2009 18:31, insgesamt einmal bearbeitet
 

romanski1985

BeitragDo, Aug 20, 2009 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
übrigens wenn ich das mit themouse <> Null weglasse passiert folgendes für die darauffolgende line:

Unhandled Exception:Attempt to access field or method of Null object

wenn ich die zeile drinlasse passiert wie beschrieben garnichts.

aber es scheint trotzdem damit zu tun zu haben. er bemerkt nicht dass themouse ein bild ist also geladen wurde. ansonsten klappt es ja auch warum erkennt er es nicht in der type?
  • Zuletzt bearbeitet von romanski1985 am Do, Aug 20, 2009 18:37, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragDo, Aug 20, 2009 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn themouse lokal ist, ist es in der Draw-Methode nicht verfügbar.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BtbN

BeitragDo, Aug 20, 2009 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) Schreib in die erste Zeile von jedem Code folgendes: SuperStrict
Wenn du das nicht tust, ist es quasi zwecklos, zu versuchen, dir zu helfen.
2.) Doppelpost sind nicht gut.
 

romanski1985

BeitragDo, Aug 20, 2009 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ok krass. danke!!

hatte das bild nicht mit global sondern local geladen daran lag es. jetzt verstehe ich etwas mehr. vielen dank!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group