• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Hilfe bei urwigo

Stammi001

Geonewbie
Hi Leute

Wir haben heute unseren ersten Wig nach mehreren Wochen fertig gestellt und auch getestet!
Er läuft auf Android (Galxy Tab) und auch im urwigo Player am Pc tadellos

Aber auf dem Oregon fehlt mir an S1 schon ein Button und es kann nicht weitergehen!

Ich hab nun gelesen das das Garmin das "onklicked" bzw "beim anklicken" nicht kann!

Wie kann ich das umgehen das es auf dem Oregon bzw auf den anderen Garmins auch läuft?

Grüße und Danke im voraus
Flo
 

wendenzo

Geocacher
... indem du beim gewünschtem Gegenstand (Objekt) nicht den OnClick (Beim Anklicken)-Trigger verwendest, sondern in dem Feld darüber einen Befehl definierst, der beim Anklicken ausgeführt wird.
 

jonny65

Geomaster
Es kommt drauf an, was hinter dem onklick steckt. Elegant ist es diese Prozedur in eine Funktion zu packen und diese dann aus dem onklick aufzurufen. Für die Geräte, die damit nicht umgehen können (Garmin, evtl. iPhone ?) wird ein Kommando im Item angelegt, das ebenfalls die ausgelagerte Funktion ausführt. Was passiert jetzt ? Whereyougo Spieler klickt aufs Item und die Funktion wird SOFORT ausgeführt. Garmin Spieler klickt aufs Item, was aber nicht gleich zur Funktion führt, sondern erst das Kommando anzeigt, was dann die Funktion aufruft. Vorteil ist klar, du musst nix umbauen, nur ergänzen, nebenbei spart der WYG Spieler (und das sind geschätzte 75% aller Spieler) 1 Klick :/ weil er nicht den "Umweg" übers Kommando gehen muss.
 

wendenzo

Geocacher
Ich dachte mal gelesen zu haben, dass das OnClick Event bei Oregons zu Abstürzen führen sollte. Ich besitze keine Oregon, und konnte das deshalb nicht nachvollziehen. Wenn die Behauptung mit dem Absturz wirklich nicht stimmt, dann ist die Lösung von jonny65 wirklich toll, und ich werde in Zukunft meine Wherigos auch so umsetzen.
 

Charlenni

Geomaster
Nachteil ist, dass man den Gegenstand nicht zu sehen bekommt, sondern beim Klick in der Liste auf den Gegenstand sofort die Funktion ausgeführt wird. Erst dann wird der Gegenstand angezeigt. Es handelt sich also bei dem von Jonny65 beschriebenen Verfahren um zwei völlig verschiedene Abläufe im Spiel: auf Garmins kann man die Beschreibung des Gegenstandes lesen und das Bild anschauen. Danach wird bei Bedarf ein Kommando aufgerufen. Auf den anderen Geräten wird sofort ein Kommando aufgerufen und erst später kann man die Beschreibung lesen und das Bild anschauen.
 

jonny65

Geomaster
Absturz wegen onClick konnte nie verifiziert werden, die Funktion die dahinter steht, wird bei Garmin einfach nur nicht ausgeführt.

Die Bemerkung von Charlenni ist schon richtig, diese Technik macht natürlich nur Sinn, wenn ein eindeutiger Handlungsstrang folgt, der keine Auswahlmöglichkeiten benötigt. Das kann auch ein Item im Sinn einer Tätigkeit sein, z.b Speichern, Schiessen, Messen, Springen, Verstecken, Statistik anzeigen usw.

Achja, das ganze ist nicht zu verwechseln mit Zonenkommandos, da tut sich bei Garmin wirklich nix, hier wird nicht mal das Kommado angezeigt, evtl. war das ursprünglich in dem Thread ja auch gemeint.
 

sucher1966

Geonewbie
Hallo zusammen,

ich möchte mich gleich mal mit ins Thema einreihen. Ich finde die Informationen für die on_klick-Procedur sehr interessant. Jetzt meine Frage: Kann man die auch "deaktivieren", wenn diese nicht benötigt wird ?
 

Charlenni

Geomaster
Nicht so wie bei normalen Commandos. Man kann natürlich die Funktion ersetzen bzw. auf nil setzen, wenn sie nicht gebraucht wird, und wieder zuweisen, wenn sie wieder benutzt wird.
 

sucher1966

Geonewbie
Das interessiert mich ja jetzt noch mehr. Könntest du mir die Sache mal erklären ? Ich habe bisher nur in Urwigo geschrieben, also von LUA keine Ahnung(falls das nur damit geht).

LG sucher1966
 

Charlenni

Geomaster
Ich wiederum kenne mich nicht genug in Urwigo aus, um festzustellen, ob es komplett in Urwigo geht :???: .

Egal, habe Dir jetzt mal eine hybride Lösung gebastelt. Urwigo im Anhang. Kernstück sind zwei Lua-Funktionen, die die OnClick-Behandlung ein- bzw. ausschalten. Diese sehen folgendermaßen aus:
Code:
function DeactivateOnClick(item)
  if item == nil or type(item) ~= "table" then
    return
  end
  item.OriginalOnClick = item.OnClick
  item.OnClick = nil
end

function ActivateOnClick(item)
  if item ~= nil and type(item) == "table" and item.OriginalOnClick ~= nil then
    item.OnClick = item.OriginalOnClick
  end
end
DeactivateOnClick wird mit einem ZItem (kann natürlich auch ein ZCharacter sein) aufgerufen. Ist dieses item nicht definiert oder keine Tabelle, dann wird nichts gemacht. Ansonsten wird die bisherige Funktion gesichert und gelöscht. Das war es auch schon. Ab jetzt gibt es keine Funktion zum OnClick Ereignis mehr, es passiert also nichts mehr bzw. es wird die normale Detailseite angezeigt.

Mit der Funktion ActivateOnClick wird nun überprüft, ob es eine originale OnClick Funktion gibt und wenn ja, dann wird diese wieder gesetzt, so dass ab diesem Moment wieder eine OnClick Funktion existiert, die aufgerufen werden kann.

Beim Erstellen der Cartridge wird das OnClick Ereignis ganz normal erstellt und, falls das OnClick-Ereignis zu Anfang deaktiviert sein soll, im OnStart-Ereignis deaktiviert.

Diese Herangehensweise sollte auch das Speichern überleben.
 

Anhänge

  • OnClick.zip
    1,8 KB · Aufrufe: 10

sucher1966

Geonewbie
Da hab ich jetzt gleich noch die nächsten Fragen: Muss da bei der Kennung in den Eigenschaften ein "Name" eingetragen werden ?

Sind das in den Lua Benutzerdef.Code - Feldern direkte Befehle, oder verbirgt sich da irgendwo noch eine Procedur? (Sind vielleicht doofe Fragen, aber fragen kostet nichts)
 

Charlenni

Geomaster
Ja, Du musst eine Kennung angeben. Diese muss der Kennung entsprechen, die Du beim Aufruf der Funktion angibst.

Die zweite Frage ist etwas schwerer, da ich nicht ganz den Sinn verstehe. Also, ActivateOnClick und DeactivateOnClick sind beides Funktionen. Lua unterscheidet nicht zwischen Funktionen und Proceduren.

OnClick ist ein Tabelleneintrag, der eine Funktion enthalten kann. Ebenso ist es mit OriginalOnClick. Welche Funktion nun wirklich hinter OnClick steckt, legst Du ja in Urwigo fest.
 

sucher1966

Geonewbie
So, hab mal was probiert.
...und...
ich bin begeistert.
Zuerst hatte ich Probleme und Fehlermeldungen, bis ich kappiert hatte, dass ich den Code aus deiner Cartridge in meine LuaFunktionen einfügen sollte.
Jetzt klappen die ersten Funktionen super.
 

sucher1966

Geonewbie
Ich konnte jetzt mal eine kleine selbst erstellte Cartridge auf mehereren Geräten und mehrereren Playern probieren.
Dabei liefen die WFplayer auf Android und IOS so, wie ich das erwartet habe.
Mit WhereYouGo hat auch alles funktioniert.
Nur mit dem Where I Go player auf dem Apfel gab es eine Fehlermeldung. Diese kam dann sogar sooft, wie ich die Funktion in der Cartridge aufgerufen habe. An sich haben aber die Funtionen das gemacht, was ich wollte.
 

Anhänge

  • Datei 09.04.15 15 10 36.png
    Datei 09.04.15 15 10 36.png
    101,7 KB · Aufrufe: 672

Charlenni

Geomaster
Sorry für die späte Antwort. Hatte viel zu tun.

Ok, dann der iPHone Player kein type(). Habe eine eigene Funktion geschrieben. Das Ergebnis sollte dann auch auf dem iPhone Player laufen.
Code:
function DeactivateOnClick(item)
  if item == nil or not IsZObject(item) then
    return
  end
  item.OriginalOnClick = item.OnClick
  item.OnClick = nil
end

function ActivateOnClick(item)
  if item ~= nil and IsZObject(item) and item.OriginalOnClick ~= nil then
    item.OnClick = item.OriginalOnClick
  end
end

function IsZObject(obj)
  local isZObject = false
  local str = tostring(obj)
  local strLength = string.len(str)
  
  if strLength > 10 and string.sub(str, 1, 1) == "a" and string.sub(str, strLength - 7) == "instance" then
    isZObject = true
  end
  
  return isZObject
end
Urwigo Testcartridge ist im Anhang.
 

Anhänge

  • OnClick.zip
    1,9 KB · Aufrufe: 11
Oben