[Monkey] Import umständlich - gibts umwege?

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

 

PhillipK

Betreff: Import umständlich - gibts umwege?

BeitragMi, Jun 05, 2013 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu!

Bei meinen ersten versuch bin ich schon recht zufrieden mit Monkey. Leider finde ich das scopen total mistig Sad
Ich lagere viel und gerne aus. Bei Blitzmax wie auch C# ist das kein ding - einfach importen / includieren und man(n) braucht sich nicht um scopes kümmern.

Wie aber sieht das in monkey aus?

Ich habe mir erstmal eine mini-inputklasse gebaut, welche im moment noch recht monkey nah ist, allerdings um krams wie TouchDown()-Dauer erhöht werden kann.

Diese liegt in "Input.monkey" und sieht wie folgt aus:
BlitzMax: [AUSKLAPPEN]
Strict

Import newfile

Class TouchInput

Global _hit:Int[5]
Global _down:Int[5]
Global _released:Int[5]
Global _up:Int[5]


Const TOUCH_ONE:Int = 0
Const TOUCH_TWO:Int = 1
Const TOUCH_THREE:Int = 2
Const TOUCH_FOUR:Int = 3
Const TOUCH_FIVE:Int = 4

Function Update:Int()

'HTML and glfw target. There is a check for Mousehit / MouseDown only!
#If TARGET="glfw" Or TARGET = "html5"
'Support Left, Right and Middlebutton.
Local keys:Int[] =[MOUSE_LEFT, MOUSE_RIGHT, MOUSE_MIDDLE]

For Local i:Int = 0 To keys.Length - 1
_released[i] = False 'reset the released state each time.
' Check the MouseHit
If MouseHit(keys[i]) Then
If _up[i] > 0 Then _up[i] = 0
_hit[i] = True
' No Mousehit? Check the MouseDown
Else If MouseDown(keys[i]) Then
If _up[i] > 0 Then _up[i] = 0
_down[i] = True
' Nothings down or hit? Check last state
Else If _hit[i] > 0 Or _down[i] > 0 Then
_up[i] = True
_hit[i] = 0
_down[i] = 0
_released[i] = True
EndIf
Next

#EndIf
'Android and other smartphone / tablet targets. I can only support the android target.
#If TARGET="android"

'Support up to 5 Finger-touches. I cant debug more on my own.
For Local i:Int = 0 Until 5

_released[i] = False 'reset the released state each time.

'Check the TouchHit
If TouchHit(i) Then
If _up[i] > 0 Then _up[i] = 0
_hit[i] = True
' No TouchHit? Check the TouchDown
Else If TouchDown(i) Then
If _up[i] > 0 Then _up[i] = 0
_down[i] = True
' Nothings down or hit? Check last state
Else If _hit[i] > 0 Or _down[i] > 0 Then
_up[i] = True
_hit[i] = False
_down[i] = False
_released[i] = True
EndIf
Next
#EndIf

Return True

End

Function IsHit:Int(button:Int, reset_after:Int = False)
If button <= 4 And button > 0 And _up[button] = False Then
If reset_after Then
Local i:Int = _hit[button]
_hit[button] = False
Return i
EndIf
Return _hit[button]
EndIf
Return -1
End
Function IsDown:Int(button:Int)
If button < TOUCH_FIVE And button >= TOUCH_ONE And _up[button] = False Then
Return _down[button]
EndIf
Return -1
End

Function IsReleased:Int(button:Int)
If button < TOUCH_FIVE And button >= TOUCH_ONE And _up[button] = True Then
Return _released[button]
EndIf
Return -1
End

Function IsUp:Int(button:Int)

If button < TOUCH_FIVE And button >= TOUCH_ONE Then
Return _up[button]
EndIf
Return -1
End
End


Mal davon ab, das es mich stört, das ich "Import newfile" haben muss (meine hauptdatei) um dinge wie MouseDown() nutzen zu können, nervt es noch viel mehr, wie ich diese datei ansprechen kann:

Hauptdatei:

BlitzMax: [AUSKLAPPEN]
[...]
Import Input

[...]

If Input.TouchInput.IsDown(i) > 0 Then

[...]

Das problem würde gelöst, wenn ich davon eine instanz anlegen würde. Dh einmalig zb "Field inputHandler:Input.TouchInput = new Input.TouchInput" machen.
Aber wozu? Diese klasse war nie dafür gedacht, instanziert zu werden. Man kriegt ja nicht plötzlich mehr mäuse an den pc, weil man im programm mehr klassen anlegt *g* Ausserdem würden diverse instanzen sich gegenseitig stören, so wie multiple "MouseHit(0)" abfragen in blitzmax sich gegenseitig das event geklaut haben.

Gibt es eine möglichkeit, wie in C# zb das ganze zu vereinfachen oder die klasse direkt in meinen hauptcode einzubinden, OHNE den sourcecode zusammenzufügen?

Gruß, PhillipK

Midimaster

BeitragDo, Jun 06, 2013 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
seltsam...

ich kann Klassen immer problemlos im Code ansprechen, auch wenn sie sich in einer anderen Datei befinden, die ich über Import dazulade...

BlitzMax: [AUSKLAPPEN]
...
Import Input
...

If TouchInput.IsDown(i) > 0 Then
...


Hast Du dir mal das MINIB3D Monkey Project angesehen? Dort kann man sehr schön sehen, wie man Monkey Projekte um viele Module mit vielen Klassen erweitert und diese Klassen immer von überall auch ansprechen kann. Ebenso wird gezeigt, wie eine eigene Funktion in solchen Klassen quasi zu einen "normalem" Monkey Befehl wird.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

PhillipK

BeitragDo, Jun 06, 2013 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, da ich noch in der anfänglichen lernphase der Syntax bin (ist ja nicht 100% wie blitzmax), hatte ich nichtmal in erwähgung gezogen, mir minib3d zu nehmen Smile

Generell hab ich noch nicht viel sourcecode konsumiert. Allerdings bin ich mir nicht sicher, ob es am "strict" liegt - anfangs hatte ich kein strict drinne und hatte da meine erste auslagerung getestet.
ERgebnis: die klasse "camera" wurde nicht gefunden in der maindatei.
Durch zufall bin ich drauf gekommen, das ich ImportName.ClassName nutzen muss, das es geht. Nun, deswegen frag ich hier Very Happy

Morgen früh werde ich mich wohl besser genauer damit beschäftigen; freundin muss früh raus und weckt mich, ich muss erst nachmittags los -> viel zeit Smile

Wie sieht des denn bei dir aus? Arbeitest du Strict / Nichtstrict (gibt es überhaupt superstrict?)
Nutzt du auch "Import Name" - oder gibts da eventuell andere sachen, wie zb Stringnamen ala blitzmax? (Import "Input.monkey" odersowas)?

Midimaster

BeitragDo, Jun 06, 2013 8:38
Antworten mit Zitat
Benutzer-Profile anzeigen
immer "srtict"

ich bin andere Code-Files einfach mit dem Namen ein:
[/code]Import Gui[/syntax]

Das File dazu heißt dann aber "Gui.monkey"
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

PhillipK

BeitragDo, Jun 06, 2013 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs heute noch ein wenig ausprobiert.

Sprich, habe heute morgen einfach mal den Scope meines Input-class files weggelassen und direkt die klasse genutzt - das ging.
Bei der nächsten klasse die ich erschaffen habe (für ein miniprojekt für den matheunterricht heute: Formelsammlung fürs android!) gab allerdings wieder den fehler.

Es scheint da irgendeine regel zu geben, die ich noch nicht kenne.. Vielleicht hats mit dem builden zu tun (wenn projekt.build vorhanden vielleicht?)

Auf jedenfall extrem blöd Very Happy

Oder, vielleicht liegt es daran, das ich meine monkey-dateien (wie damals in blitzmax auch) immer nach der klasse benenne.

Bmx: Das type "TInput" liegt in der datei "TInput.bmx"
Monkey: Die Class "Input" liegt in der datei "Input.monkey"

Für mein touch-inputhandler habe ich gestern wegen irgendeinem fehler die datei umbenennen müssen; diese heißt momentan "TouchInputFile", wärend die klasse darin "TouchInput" heißt.

Wie sieht das ganze bei dir aus? Wie ist dein aufbau?
Mit etwas mehr grundwissen kann ich die problematik eventuell eingrenzen Smile

Midimaster

BeitragDo, Jun 06, 2013 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
sobald irgendwelche Errors auftreten bin ich auch meist schon mit meinem Latein am Ende. Hier hilft halt nur der rege Austausch mit den anderen Nutzern in einem Forum. Man muss ja nicht immer das Rad neu erfinden, wenn vielleicht schon irgend ein Anderer aus dem selben Problem heraus eine Lösung gefunden hatte.

Schade nur, dass man immer auf das englische Forum zurückgreifen muss. Die deutsche Monkey Community hat sich ja noch nicht eindeutig für eines der beiden deutschen Foren entschieden und schreibt nun lieber in englisch....

Ich bin ja weiterhin der Meinung Monkey gehört hier in die Blitz Community, da die sich ergebenden Fragestellungen auch oft schon durch Recherche in den alten Foren beantwortet werden können. z.B "MiniB3D for Monkey" setzt nathlos das alte Blitz3D fort. Viele Monkey Module gab es schon unter BlitzMax.

Aber vielleicht reißen wir das Ruder ja noch rum durch fleißige Beiträge und Aktivitäten... Es wäre durchaus eine Chance für diese Site hier. Und zur Zeit werden es ja gefühlt wirklich mehr User die umsteigen...



zum Thema Aufbau:

Ich code so vor mich hin. Meine Monkey Projekte sind deutlich kleiner als Windows Projekte. Daher bleibt alles sehr übersichtlich. Was ich anders mache:

- alles findet in Klassen statt.
- so gut wie gar keine globalen Variablen mehr.
- meine Hauptklasse "Game Extends App" hat gefühlt dafür jetzt zuviele "Fields"
- oft sind "Speziallösungen" nötig, damit die Performance flüssig bleibt (z.b Texte)
- die Bugs wegen den vielen Smartphones und Android-Versionen sind zeitraubend, aber lehrrreich.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Rone

BeitragDo, Jun 06, 2013 10:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Dateinamen kleinschreiben, also

Class Input in input.monkey

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group