Liebes Forum,
aus einer Bierlaune heraus bin ich immer wieder mal am grübeln, wie ich Notes als Spielekonsole vergewaltigen könnte :-)
Folgende Idee:
Einfache Datenbank mit sagen wir 25 Dokumenten, von oben nach unten durchnummeriert und danach sortiert.
Angezeigt wird nur ein Feld, sagen wir mit der Länge von 40 Zeichen, welches je nach Zeile von oben nach unten so gestaltet ist, dass sich ein Spielfeld ergibt, also z.B. in dieser Form (verkleinert dargestellt)
# xxxx xxxx #
# #
# o #
# _____ # (= Zeile 25)
# ist der Spielfeldrand
xxx sind die abzuschiessenden Hindernisse
o ist der Ball
___ ist der Schläger
Mit zwei Aktionsbuttons (links oder rechts) ist es ein leichtes, den Schläger nach links oder rechts rutschen zu lassen, indem man je nach Button die Leerzeichen vor dem Schläger um eins erhöht oder verringert, und so den Wert des Feldes anpasst.
Funktioniert.
Nun bräuchte ich eine Idee, wie ich den Ball fliegen lasse.
Grundsätzlich denke ich an eine Matrix (25,40) bei der ich den Ball hin und her schiebe, das ist mit variablen Winkeln eine Sache mit SIN und COS, und umwandeln der einzelnen Matrixwerte.
Wenn der Ball also nach oben fliegt, ist er in dem einen Zeitabschnitt z.B. bei Punkt 20,20, beim nächsten dann bei 19,20 ...
Entsprechend werden dann die einzelnen Felder in den entsprechenden Zeilen berechnet, die Ansicht aktualisiert - fertig :-)
Aber:
Wo programmiere ich das? Ich dachte im ersten Moment an einen Agenten, der in einem gewissen Zeitabstand x die Berechnungen durchführt. Da man die Agenten aber nicht im Sekundenabstand laufen lassen kann, wäre das ganze etwas lahm.
Wo dann? Im Datenbankscript?
Gibt es irgendwo die Möglichkeit, Code dauerhaft im Hintergrund ablaufen zu lassen, und nicht nur zu bestimmten Anlässen, wie z.B. im Queryopen Event?
Ich brauche letztlich eine Schleife um a) den Schläger zu bewegen, b) den Ball zu bewegen und dabei c) auf Kollision mit Hindernis oder Spielfeldrand zu reagieren.
Ich bin gespannt auf Ideen und Anregungen. Und falls schon jemand sowas realisiert hat, her damit :-)
Thomas
der JS Timer in einer Maske geht so:
1. Erstelle eine LS-Schaltfläche/Button (keine Maskenaktion), dieser kann auch verborgen sein. Gebe diesem einen eindeutigen Namen, letzter Reiter bei den Feldeigenschaften - das ist der HTML-Tab, im folgenden Beispiel heißt dieser: NotesAction
2. Maskenereignis JS-Header, Typ Client nicht vergessen, mit folgendem Code:
var COUNT = 300;
function runNotesAction() {
try {
document.forms[0].NotesAction.click();
setTimeout ("runNotesAction()",COUNT);
} catch (e) {}
}
die Variable COUNT enthält den Abstand in Millisekunden und könnte zur Steuerung der Spielgeschwindigkeit verwendet werden :)
3. Maskenereignis onLoad, Typ Client nicht vergessen, mit folgendem Code:
try {
setTimeout ("runNotesAction()",COUNT);
} catch (e) {}
Mehr braucht man an JS an dieser Stelle nicht, die Schaltfläche enthält deinen LS-Code Aufruf, wenn dieser sehr lange braucht dann ruckelt es ... dehalb solltest du die Zeit deiner LS-Funktion messen. Für so etwas habe ich mir eine kleine Hilfsklasse geschrieben, welcher in Millisekunden misst und ausgibt:
Class times
stc As Variant
ftc As Variant
tps As Variant
Sub new
stc = Getthreadinfo(6)
End Sub
Function getTime As String
Dim t As Variant
ftc = Getthreadinfo(6)
tps = Getthreadinfo(7)
t = (ftc - stc) / tps
getTime = Format(t * 1000,"0,000")
End Function
End Class