Ergebnis 121 bis 140 von 148
-
- 28.05.2011, 07:22
- #121
@AEG
Endlich ist eine ansprechende GUI im TouchStudio möglich!
Wie in dem Beispiel "PicBrowser" von moroli dargestellt, können wir jetzt unsere eigene GUI erstellen.
In seinem Beispiel ein "touch-sensitiver" Bereich (=> Button) zum Abfragen möglicher Infos zur Geo-Koordinate und ein "wisch-sensitiver" Bereich zum vor-/zurückblättern in den Ergebnissen.
...und wie wird es erst mit Mango werden... schwärm!
Gruß Jörg
-
- 28.05.2011, 07:47
- #122
Mit der neuen Version beta 1.2 sind zahlreiche Neuerungen zum "TouchStudio" hinzugefügt worden sowie einige Befehle geändert worden.
ACHTUNG:
Damit laufen die Beispielscripte in den vorangegangenen Posts bis einschließlich Post #100 nur noch bedingt resp. müssen evtl. angepasst werden.
Ab den Posts #117 ("TwoPics") und #118 ("PicBrowser") von moroli sind die aufgeführten Scripte für die neue Version erstellt.
Infos zur neuen Version beta 1.2:
1.) Release notes v1.2.0.1 beta (englisch)
2.) Announcing TouchStudio v1.2 beta (english)
3.) Facebook "TouchStudioApp"
Gruß Jörg
-
Fühle mich heimisch
- 28.05.2011, 12:57
- #123
Aus "TwoPics" und "PicBrowser" mach Action "TwoPics Blending" ...
Es werden zwei Bilder gemacht und danach kann man mittels des "Boards" (auf dem die entsprechende Prozentzahl angezeigt wird) durch links- und rechts-wischen die Prozentzahl beim Überblenden anpassen. Nach einem "Tap" wird gefragt, ob das Ergebnis (Bild) gespeichert werden soll.
Code:action TwoPics_Blending() : Nothing { b := media->create_board(140); b->set_background(colors->accent); s := b->create_text(480, 140, 90, '50 %'); s->set_pos(230, 70); b->post_to_wall; pic1 := senses->take_camera_picture; pic2 := senses->take_camera_picture; pic3 := pic1->clone; pic3->blend(pic2, 0, 0, 0, .5); pic3->post_to_wall; i := 50; h := true; fertig := false; while not fertig do { if b->touched then { while b->touched do { h := false; } } if not h then { if b->touch_velocity->x = 0 and b->touch_velocity->y = 0 then { h := true; if wall->ask_boolean('Soll das Bild gespeichert werden ?', '') then { pic3->save_to_library; } fertig := true; } if b->touch_velocity->x < 0 then { h := true; if i < 100 then { i := i + 10; } s->set_text(i || ' %'); b->update_on_wall; pic3->blend(pic1, 0, 0, 0, 1); pic3->blend(pic2, 0, 0, 0, i / 100); pic3->update_on_wall; } if b->touch_velocity->x > 0 then { h := true; if i > 0 then { i := i - 10; } s->set_text(i || ' %'); b->update_on_wall; pic3->blend(pic1, 0, 0, 0, 1); pic3->blend(pic2, 0, 0, 0, i / 100); pic3->update_on_wall; } } } }
-
AEG Gast
@Jrahe: Irwie blick ich bei der neuen Version nicht mehr durch... Wie kann man so einen "button" machen?
-
- 28.05.2011, 20:02
- #125
Hallo AEG,
...also....
[FONT=Arial]"[/FONT][FONT=Arial]...Da stelle mer uns janz dumm. Und da sage mer so:
[/FONT][FONT=Arial]En Dampfmaschin, dat is ene jroße schwarze Raum, der hat hinten und vorn e Loch.
Dat eine Loch, dat is de Feuerung. Und dat andere Loch, dat krieje mer später.“[/FONT]
Back to Topic:
Die neue Version ist eigentlich gar nicht so anders als die Vorgänger-Version.
Neu hinzugekommen ist das sogenannte "board", eine Art Bühne insbesondere für Spiele und ähnliches. Die Elemente darauf sind sogenannte "sprites" (ähnlich wie bei der Macromedia "Flash"-Programmierung) = schnelle bewegliche Objekte, die aber auch z.B. Textobjekte sein können, deren Inhalt sich entsprechend ändert.
Dieses "board" ist "touch-sensibel".
Und über diesen Weg lassen sich nicht nur Spiele steuern (...geniales Beispiel ist zum Beispiel das mitgelieferte Script "try missile defense"), sondern auch "Button-ähnliche"-Flächen erstellen.
Und genau dies hat moroli in seinem Script "PicBrowser" (Post #118 ) genutzt:
a) wischen über diese "board"-Fläche = vor- und zurückblättern
b) tappen auf einen Bereich der "board"-Fläche = Funktion auslösen (= Button)
Schritte zur Umsetzung:
am Beispiel von "PicBrowser" Post #118 von moroli
1.) Zu Anfang in seinem Script wird das board initialisiert und die Eigenschaft der Hintergrundfarbe zugewiesen.
Code:b := media->create_board(180); b->set_background(colors->accent);
2.) Es folgt die Initialisierung der Sprite-Objekte, hier sind es Text-Sprites.
Code:s1 := b->create_text(480, 20, 30, ''); s2 := b->create_text(480, 20, 30, ''); s3 := b->create_text(480, 20, 30, ''); s4 := b->create_text(480, 40, 18, '');
3.) Anschließend werden diese Text-Sprites positioniert.
Code:s1->set_pos(230, 10); s2->set_pos(230, 40); s3->set_pos(230, 70); s4->set_pos(230, 120);
4.) Mit "post to wall" wird das board auf die "Leinwand" gebracht
Code:b->post_to_wall;
5.) In der anschließenden "while true do"-Schleife werden für den Rest der Programmlaufzeit die folgenden Parameter überprüft. Diese Schleife läuft solange, bis das Programm beendet wird.
"h" ist hier nur ein flag als Indikator, ob gerade eine Handlung ("tappen" oder "wischen") vollzogen wird. Während dessen ist h auf "false" gesetzt. Nach Abschluß der Handlung wird h wieder auf "true" gesetzt.
5a.) Bei einem "Touch" auf dem board mit einer (Wisch-)Geschwindigkeit in x-Richtung = 0 und in y-Richtung = 0 haben wir einen "einfachen tap" => Funktion eines Buttons
Code:if b->touch_velocity->x = 0 and b->touch_velocity->y = 0 then
5b.) Bei der nächsten If-Abfrage wird für den "touch" die Geschwindigkeit in x-Richtung (= horizontal) überprüft, also das "Wischen".
Wenn diese Geschwindigkeit kleiner 0 ist = Wisch nach links => nächstes Bild
(=> i := i + 1)
Code:if b->touch_velocity->x < 0 then
5c.) Und bei der nächsten If-Abfrage wird erneut für den "touch" die Geschwindigkeit in x-Richtung (= horizontal) überprüft.
Wenn diese Geschwindigkeit größer 0 ist = Wisch nach rechts => vorangegangenes Bild
(=> i := i - 1)
Code:if b->touch_velocity->x > 0 then
6.) In den If-Abfragen werden dann den Text-Sprites die entsprechenden (Text-)Inhalte zugewiesen.
Zum Beispiel in der letzten If-Abfrage aus 5c.) :
Code:s1->set_text(i + 1 || ' / ' || media->pictures->count); s2->set_text(p1->date->to_string); s3->set_text(x1 || ' x ' || y1); s4->set_text('### Tap to get the Location ###');
7.) Und schließlich wird das board auf der Leinwand aktualisiert:
Code:b->update_on_wall;
Ich hoffe, daß dieses Beispiel die Anwendung als "Button" bzw. Nutzung als einfache GUI etwas verständlicher gemacht hat.
Vielen Dank noch einmal an moroli für sein SUPER-Script... !
Gruß Jörg
-
AEG Gast
Im getting it! Wuw, danke Jrahe (und natürlich auch moroli)
-
Fühle mich heimisch
- 29.05.2011, 02:55
- #127
-
Fühle mich heimisch
- 29.05.2011, 03:24
- #128
Und auch die kleinen runden Buttons/Icons von WP7 (haben die eigentlich einen eigenen Namen?) funktionieren => Script "!myLittleGui":
Code:script \u0021myLittleGui; action \u0021CreateToolbar() : Nothing { if wall->ask_boolean('Neues Board erstellen?', '') then { b := media->create_board(80); b->set_background(colors->dark_gray); addButton('http://windowsteamblog.com/cfs-filesystemfile.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/wpdev/appbar.back.rest_5F00_4C7C8A1E.png'); addButton('http://windowsteamblog.com/cfs-filesystemfile.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/wpdev/appbar.next.rest_5F00_3A245F36.png'); addButton('http://windowsteamblog.com/cfs-filesystemfile.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/wpdev/appbar.upload.rest_5F00_7971ECF9.png'); addButton('http://windowsteamblog.com/cfs-filesystemfile.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/wpdev/appbar.download.rest_5F00_4FCDFBF9.png'); addButton('http://windowsteamblog.com/cfs-filesystemfile.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/wpdev/appbar.feature.search.rest_5F00_6D90485F.png'); b->create_rectangle(1, 1); } } action \u0021TestGui() : Nothing { b->post_to_wall; c := media->create_board(460); c->set_background(colors->gray); s := c->create_ellipse(40, 40); s->set_color(colors->green); x := 240; y := 240; s->set_pos(x, y); c->post_to_wall; d := 10; while true do { i := waitForTap(); if i = 0 then { x := x - d; } if i = 1 then { x := x + d; } if i = 2 then { y := y - d; } if i = 3 then { y := y + d; } x := checkRange(x); y := checkRange(y); s->set_pos(x, y); c->update_on_wall; } } var b : Board { } action addButton(url: String) : Nothing { url2 := 'http://windowsteamblog.com/cfs-filesystemfile.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/wpdev/appbar.basecircle.rest_5F00_72DE6D69.png'; p := web->download_picture(url); p2 := web->download_picture(url2); s := b->create_picture(p); s2 := b->create_picture(p2); x := b->count / 2 * 80 - 15; s->set_pos(x, 40); s2->set_pos(x, 40); } action searchPicUrl() : Nothing { wall->prompt('Bitte auf der folgenden Website ein Icon aussuchen/anklicken und den Link dann kopieren!'); web->browse('http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/03/27/windows-phone-7-series-icon-pack.aspx'); } action waitForTap() : Number { j := - 1; while j < 0 do { s := b->at(b->count - 1); if b->touched then { s->set_pos(b->touch_current->x, b->touch_current->y); } else { s->set_pos(0, 0); } if s->overlaps_with(b->at(1)) then { j := 0; } if s->overlaps_with(b->at(3)) then { j := 1; } if s->overlaps_with(b->at(5)) then { j := 2; } if s->overlaps_with(b->at(7)) then { j := 3; } if s->overlaps_with(b->at(9)) then { j := 4; } } j; } action checkRange(x: Number) : Number { xx := x; if x < 0 then { xx := 460; } if x > 460 then { xx := 0; } xx; } Shared from TouchStudio v1.2.0.1 beta - http://touchstudioapp.com
Das "\u0021" im Script war ursprünglich ein Ausrufezeichen (!) - nutze ich gern für die Sortierung (steht dann ganz vorne).
Beim ersten Starten muss man "!CreateToolbar" aufrufen - die Toolbar (das Board) wird dann in der Cloud gespeichert und bleibt somit erhalten. Die Variable "b" vom Typ "Board" muss dazu unter "data" angelegt werden.
Dann kann man mit "!TestGui" diese kleinen runden "Dinger" (s.o.) testen - damit steuert man dann einen Kreis (Buttons: hoch, runter, rechts, links).
Bevor "!TestGui" ein zweites Mal gestartet werden kann, muss man aus dem Script raus und wieder rein, sonst fliegt man ganz raus - liegt wohl daran, dass das "Board" ("Toolbar") noch auf der alten "Wall" liegt, obwohl diese ja eigentlich beendet ist.
Mehr wird nicht verraten - jrahe kann das eh alles viel besser erklären...
-
- 29.05.2011, 07:44
- #129
Mehr wird nicht verraten - jrahe kann das eh alles viel besser erklären...
Danke für´s feedback....
-
AEG Gast
Puh, da werd ich wohl noch ein paar Minuten brauchen um dein Script, Moroli, zusammenzuklicken
-
Fühle mich heimisch
- 29.05.2011, 10:07
- #131
-
- 29.05.2011, 14:31
- #132
Hallo AEG,
Puh, da werd ich wohl noch ein paar Minuten brauchen um dein Script, Moroli, zusammenzuklicken
Ich nutze "Sendto WP7" auf dem Handy. Mit dem entsprechenden Link im Firefox kann ich mir web-Adressen direkt auf das Handy schicken, diese dann im IE öffnen und somit die web-Adresse per copy&paste anschließend im "TouchStudio" einfügen.
Funktioniert wunderbar...
-
- 01.06.2011, 08:01
- #133
Hallo,
...hier "aufbauend" auf dem Script "PicBrowser" von moroli die Moifikation als "MusikBrowser".
Das Script besteht aus nur einer action.
Ich nutze hier zwei "boards" für Informationen und zur Steuerung:
a) das untere board dient der Anzeige der Informationen zum aktuellen Musikalbum.
=> durch "wischen nach links" wird das nächste Album angezeigt
=> durch "wischen nach rechts" wird das vorhergehende Album angezeigt
=> durch antippen wird der Player mit dem ersten Titel des aktuellen Albums gestartet
wenn schon ein Titel des Albums läuft, wird zum nächsten Titel geschaltet
b) das obere board zeigt das Cover des aktuellen Musikalbums
=> durch antippen kann eine Liste aller Titel des aktuellen Albums ein-/ausgeblendet werden
Auf diese Weise kann man durch die Musikalben blättern.
Während die einzelnen Alben übergeblendet werden, läuft der Player mit dem gerade gespielten Titel im Hintergrund weiter.
Die Liste aller Titel aktualisiert sich nach dem aktuellen Album automatisch.
Gestartet wird das Programm mit einem ersten Wisch nach links oder rechts.
Das Programm läuft sehr stabil bei mir. (11 Alben mit 127 Liedern)
=> Allerdings braucht es beim Weiterschalten zum nächsten/vorherigen Album ca. 1 Sekunde. Das liegt an dem "Überblendeffekt" für die Cover-Bilder.
=> Bei Verlassen des Programms oder aktivem Lockscreen beendet sich das Programm bei Wiederrückkehr.
EDIT (10.06.2011)
=> wenn ein Album ohne Cover-Bild aufgerufen wird, bricht das Programm mit einer Fehlermeldung ab.
=> für diesen Fall könnte eine zusätzliche Überprüfung in Form von "is valid" eingearbeitet werden.
Wichtig:
...in dem Code sind Kommentarzeilen eingefügt, die mit einem Doppel-Slash beginnen.
...also alle Zeilen "// ..." beim abtippen ignorieren
Viel Spaß
Jörg
Code:action _MusikBrowser() : Nothing { // Definition "board picture" => für das Albumcover bp := media->create_board(460); bp->set_background(colors->background); // Definition "board box" => für die Textinfobox bb := media->create_board(180); bb->set_background(colors->gray); // Definition des "Hilfs-Objekt" für sp1 p := media->create_picture(460, 460); p->clear(colors->background); // Definition der sprite-Objekte sp1 := bp->create_picture(p); sp2 := bp->create_rectangle(460, 460); sp3 := bp->create_text(460, 460, 20, ''); sb1 := bb->create_text(480, 20, 30, ''); sb2 := bb->create_text(480, 20, 30, ''); sb3 := bb->create_text(480, 20, 30, ''); sb4 := bb->create_text(480, 40, 18, ''); // Positionierung der sprite-Objekte sp1->set_pos(230, 230); sp2->set_pos( - 230, 230); sp3->set_pos( - 230, 230); sb1->set_pos(230, 10); sb2->set_pos(230, 40); sb3->set_pos(230, 70); sb4->set_pos(230, 120); // Zuweisung der Eigenschaften einiger sprite-Objekte sp2->set_color(colors->black->make_transparent(0.7)); sp3->set_text('kein\nAlbum\ngewählt'); sb1->set_text('Zum Starten hier \qwischen\q'); // Projektion der boards auf die wall bb->post_to_wall; bp->post_to_wall; // Definition Index i für die Musikalben und x für den aktuellen Musiktitel i := - 1; x := 0; // Definition des Status, ob "board box" berührt wurde flag1 := true; // Definition des Status, ob "board picture" berührt wurde flag2 := true; // Definition des Status, ob die Titel-Liste angezeigt wird flag3 := true; // Definition n = "Anzahl der Alben" und a = "aktuelles Album" n := media->song_albums->count; a := media->song_albums->at(0); // Start der "Dauerschleife" für den eigentlichen Programmablauf while true do { // Abfrage, ob das obere "board picture" berührt wurde if bp->touched then { while bp->touched do { flag2 := false; } } // ...ab hier, für den Fall, das berührt wurde if not flag2 then { if flag3 then { sp2->move(460, 0); sp3->move(460, 0); flag3 := false; } else { sp2->move( - 460, 0); sp3->move( - 460, 0); flag3 := true; } bp->update_on_wall; flag2 := true; } // Abfrage, ob das untere "board box" berührt wurde if bb->touched then { while bb->touched do { flag1 := false; } } // ...ab hier, für den Fall, das berührt wurde if not flag1 then { // Fall = einfacher tap => Player "start" bzw. "weiter" nächstes Lied if bb->touch_velocity->x = 0 and bb->touch_velocity->y = 0 then { if i >= 0 then { player->play(a->songs->at(x)); if x < a->songs->count - 1 then { x := x + 1; } else { x := 0; } } } // Fall = Wisch nach links => nächstes Musikalbum if bb->touch_velocity->x < 0 then { i := i + 1; if i >= n then { i := 0; } x := 0; } // Fall = Wisch nach rechts => vorheriges Musikalbum if bb->touch_velocity->x > 0 then { i := i - 1; if i < 0 then { i := n - 1; } x := 0; } // Ermitteln und Einsetzen der aktuellen Daten if i >= 0 then { a := media->song_albums->at(i); anz := a->songs->count; cover := a->art; cover->resize(460, 460); // Überblenden der Cover innerhalb 1 Sekunde alpha := 0; for 0 <= i1 < 10 do { alpha := alpha + 0.1; p->blend(cover, 0, 0, 0, alpha); p->update_on_wall; } // Schreiben der Infos zum aktuellen Album sb1->set_text(a->name); sb2->set_text(a->artist); sb3->set_text(a->songs->count || ' Titel ' || math->floor((a->duration) / 60) || ' Minuten'); // Erstellen der Liste der Titel des aktuellen Albuns song := a->songs->at(0); liste := ''; liste := liste || song->name; for 0 <= i2 < anz - 1 do { song := a->songs->at(i2 + 1); liste := liste || '\n' || song->name; } // Schreiben der Titel-Liste sp3->set_text(liste); // Schreiben der Infos zum aktuell gespielten Titel // dieser ist nicht unbedingt identisch mit aktuellem Album if player->is_playing then { sb4->set_text('-----------------------------------\naktueller Titel\n' || player->active_song->artist || ' - ' || player->active_song->name || ' - ' || player->active_song->track); } else { sb4->set_text('-----------------------------------\nTippen zum Starten des Players\n' || a->songs->at(0)); } // Aktualisierung der boards auf der wall bb->update_on_wall; bp->update_on_wall; flag1 := true; } } } } Shared from TouchStudio v1.2.0.1 beta - http://touchstudioapp.com Edited with comments by Jörg Rahe Thanks to moroli from pockepc.ch
-
- 11.06.2011, 16:47
- #134
Ich hatte mir gestern das erste Mal den Bereich der Spiele angesehen...
Neben vielen anderen (Test-)Versionen wird z.B. auch "Frogger" angeboten. Recht gut gemacht, kostet in der "Vollversion" 0,99 Euro.
Was aber ist mit denjenigen, die nicht über eine Kreditkarte verfügen...?
...na ja, sowas wie "Frogger" sollte doch auch mit dem "TouchStudio" möglich sein.
Hier also ein schnelles Beispiel:
(...es ist natürlich noch ausbaufähig und individuell anpassbar)
FROSCH
Spielstart:
Zu Beginn werden drei Parameter vom Spieler abgefragt:
1. die gewünschte Spielfeldgröße. Hier bietet sich ein Wert von 400 an.
Bei Werten über 500 wird es richtig lustig, wenn man den Frosch am unteren Fahrbahnrand nicht mehr sieht und diesen "blind" steuern muß.
Ebenso "nett" sind Werte unter 200 mit mehreren Fahrbahnen, da dann der Frosch schon im wartenden Zustand am unteren Fahrbahnrand getroffen werden kann.
2. die Anzahl der Fahrbahnen. Hier bietet sich ein Wert von z.B. 4 an.
Je mehr Fahrbahnen, desto höher sind die zu erzielenden Punkte.
Aber manchmal ist weniger auch mehr....
3. der gewünschte Start-Level. Wenn hier nichts eingegeben wird, startet das Spiel mit Level 1.
Je höher der Level, desto höher sind die zu erzielenden Punkte, aber entsprechend schneller bewegen sich aucch die Autos.
Steuerung:
Durch Wischbewegung auf der Spielfläche springt der Frosch entsprechend der Wischrichtung entweder jeweils eine Fahrbahn höher/runter oder aber einen Schritt nach rechts/links.
Mit jedem Sprung nach oben erhöhen sich die Punkte (die Punkthöhe ist abhängig von der Anzahl der Fahrbahnen und dem Level).
Mit dem Erreichen des oberen Fahrbahnrands wird der Level jeweils erhöht.
Je höher der Level, desto schneller fahren die Autos.
Bei Kontakt mit einem Auto wird das Spiel beendet.
Zeitsteurung:
Auf Grund eines aktuellen Fehlers im "TouchStudio" ist die Differenzberechnung zwichen zwei timestamps aktuell nicht möglich. Daher habe ich die Zeitsteuerung noch nicht implementiert. Die Anzeige ist schon vorbereitet.
(... der Fehler im "TouchStudio" wird mit dem nächsten Update behoben werden)
Strategie:
Der Phantasie sind hier kaum Grenzen gesetzt. Ob man(n) sich ausschließlich am oberen Rand aufhält, um möglichst schnell die Level "hochzuschalten", oder aber es lieber mit einem großen Spielfeld und nur einer Fahrbahn versucht...
Script:
In dem nachfolgenden Script sind mit einem "//" eingeleitete Kommentarzeilen mit Erklärungen zu den einzelnen Programmteilen eingefügt worden. Diese sind beim Abtippen zu ignorieren.
Neben der "Hauptaction" FROSCH ist eine weitere action RESET, um den Highscore zu löschen.
Dieser Highscore bleibt als "globale Variable" auch nach Spielende erhalten, solange, bis er mit der action RESET wieder auf Null gesetzt wird.
Insgesamt gibt es drei "globale Variablen":
a) high => Highscore
b) lev => aktueller Level (wird beim Start erfragt oder alternativ mit 1 begonnen)
c) score => aktueller Punktestand (wird beim Start auf Null gesetzt)
Code:script Frosch; /////////////////////////////////////////////////////////////////////////// // data = globale Variablen // der Wert für Highscore bleibt auch nach Beenden des Spiels erhalten // die Werte für Level und Punkte werden bei jedem neuen Spiel zurückgesetzt var high : Number { } var lev : Number { } var score : Number { } /////////////////////////////////////////////////////////////////////////// // Hier beginnt die zusätzliche "action" RESET, um den Highscore zu löschen action Reset() : Nothing { if wall->ask boolean("Wirklich Highscore löschen?", "") then { high := 0; } } /////////////////////////////////////////////////////////////////////////// // Hier beginnt die "action" => FROSCH // // Zu Beginn des Spiels werden die Startparameter abgefragt: // Höhe Spielfeld, Anzahl der Spuren, gewünschter Startlevel action Frosch(height: Number, lane: Number, level: Number) : Nothing { // zunächst werden die Startwerte initialisiert: // vert = vertikale Schrittweite des Frosch, entspricht einer Spurbreite // horiz = horizontale Schrittweite des Frosch // x und y sind die Startposition für den Frosch // a und b sind Parameter für das Tempo der Autos // points sind die Punkte für Spurwechsel aufwärts, abhängig vom Schwierigkeitsgrad // flag ist ein Indikator für das Hochsetzen zum nächsten Level if level = 0 then { lev := 1; } else { lev := math->abs(level); } score := 0; zeit := 60; vert := height / (lane + 2); horiz := 40; x := 240; y := height - vert / 2; a := 10; b := 10; tempo := a + b * lev; points := lane * lev; flag := false; // Initialisierung des Spielfelds Game := media->create_board(height); Game->set_background(colors->gray); // Initialisierung und Positionierung der Spuren for 0 <= i < lane do { spur := Game->create_rectangle(480, height / (lane + 2) - 5); spur->set_pos(240, vert / 2 + (i + 1) * vert); } // Initialisierung und Positionierung des Froschs frog := Game->create_ellipse(40, 40); frog->set_color(colors->green); frog->set_pos(x, y); // Initialisierung und Positionierung der Autos for 0 <= i1 < lane do { car := Game->create_rectangle(50, 30); car->set_color(colors->rand); car->set_pos(30, vert / 2 + vert + i1 * vert); car->set_speed((1 + math->rand(10)) * tempo, 0); } // Initialisierung und Positionierung der Punkteanzeige Punkte := Game->create_text(100, 20, 24, 'Punkte: ' || score); Punkte->set_pos(60, 20); Punkte->set_color(colors->light_gray); High := Game->create_text(100, 20, 24, 'High: ' || high); // Initialisierung und Positionierung der Highscoreanzeige High->set_pos(330, 20); High->set_color(colors->light_gray); Zeit := Game->create_text(100, 20, 24, 'Zeit: ' || zeit); // Initialisierung und Positionierung der Zeitanzeige (aktuell nicht aktiv) Zeit->set_pos(60, height - 30); Zeit->set_color(colors->light_gray); // Initialisierung und Positionierung der Levelanzeige Level := Game->create_text(100, 20, 24, 'Level: ' || lev); Level->set_pos(330, height - 30); Level->set_color(colors->light_gray); // Aktualisierung des Spielfelds und Beginn der Startzeit Game->evolve; Game->post_to_wall; start := time->now; // Hier beginnt das eigentliche Spiel in einer "Endlosschleife" while true do { // die folgende Abfrage überprüft, ob das Spielfeld berührt wurde if Game->touched then { p := Game->touch_start; // während der Überprüfung wird das Spiel fortlaufend aktualisiert while Game->touched do { Game->evolve; Game->update_on_wall; } p1 := Game->touch_end; // Ermittlung, ob Wischbewegung horizontal (dx) oder vertikal (dy) dx := math->abs(p->x - p1->x); dy := math->abs(p->y - p1->y); if dx > dy then { // Wischbewegung => nach rechts if p1->x > p->x then { if frog->x + horiz <= 460 then { frog->move(horiz, 0); } Game->evolve; } else { // Wischbewegung => nach links if frog->x - horiz >= 0 then { frog->move( - horiz, 0); } Game->evolve; } } else { // Wischbewegung => nach unten if p1->y > p->y then { if frog->y + vert <= height then { frog->move(0, vert); } Game->evolve; } else { // Wischbewegung => nach oben + Punkte + Level höher bei Erreichen oberem Rand if frog->y - vert >= 0 then { frog->move(0, - vert); score := score + points; points := lane * lev; Punkte->set_text('Punkte: ' || score); if frog->y < height / (lane + 2) then { lev := lev + 1; Level->set_text('Level: ' || lev); tempo := a + b * lev; flag := true; } } Game->evolve; } } } // permanent wird für jede Spur überprüft, ob eine Kollision mit Frosch vorliegt for 0 <= i2 < lane do { // mit "u" werden die Autos auf den einzelnen Spuren ermittelt u := Game->at(i2 + lane + 1); // wenn zuvor ein Level höher gestellt wurde, wird das Tempo angepasst if flag then { u->set_speed((1 + math->rand(10)) * tempo, 0); } // wenn es zu einer Kollision kommt, wird das Spiel gestoppt if u->overlaps_with(frog) then { if score > high then { high := score; High->set_text('High: ' || high); } ENDE := Game->create text(200, 40, 60, "ENDE"); ENDE->set position(240, height/2); ENDE->set color(colors->red); while true do { do nothing; } } } // zurücksetzen des Indikators für "Level höhersetzen" und Aktualisierung des Spielfelds flag := false; Game->evolve; Game->update_on_wall; } }
Beispiele:
Spielfeldgröße 400 mit 2 oder 4 oder 8 Fahrbhnen:
Spielfeldgröße 500 oder 200 bei jeweils 2 Fahrbahnen:
Spielende:
VIEL SPASS beim Scripten und Spielen
Jörg
-
AEG Gast
Jörg hat wieder zugeschlagen ...
Und endlich begreife ich halbwegs wie man ein Spiel macht, Danke
-
Bin neu hier
- 05.07.2011, 14:43
- #136
Hallo allerseits,
gibt es eine Möglichkeit, mit TouchStudio Schnellzugriffe zu erstellen und auf dem Startbildschirm anzuzeigen???
z.B. Bluetooth, GPS, WLAN, Klingelton etc. ein- und ausschalten ohne über 'Einstellungen' zu gehen.
-
- 05.07.2011, 14:54
- #137
...nein, zur Zeit noch nicht.
Mit dem (offiziellen) Mango-Update im Herbst werden einzelne Scripte auf dem Startbildschirm abzulegen sein.
Inwieweit die Schnittstellen zu WLAN, GPS, BT etc. von Microsoft freigegeben werden, weiß ich nicht.
Gruß Jörg
-
Bin hier zuhause
- 06.07.2011, 07:17
- #138
D. h., Du weißt schon jetzt, dass das offizielle Mango Update in diesem Bereich anders wird, als die Mango Beta?
Ich könnte mir lediglich vorstellen, dass ein App-Update die neuen Funktionen bringen könnte. Aber Für eine Funktion "Script auf Tile" bedarf es bestimmt nicht der Mangoversion.
Mit der kostenlosen PocketPC.ch App von meinem OMNIA7 aus geschrieben.
-
- 06.07.2011, 07:55
- #139
Hallo Salix,
...nein, ich weiß nicht, ob und inwieweit sich das offizielle Mango update von der aktuellen beta-Version unterscheiden wird.
Für das Anpinnen von Scripten auf der Startseite muß aber das offizielle Mango update in diesem Bereich auch nicht anders sein als das Mango beta update. Mit Mango beta wäre dies wahrscheinlich auch schon möglich.
Allerdings muß die Anwendung "TouchStudio" dafür "anders sein", nämlich für Mango neu programmiert/angepasst werden, um diese Funktionen nutzen zu können.
Ähnliches betrifft z.B. das "Multitasking":
Mit der Mango beta Version erhalten wir schon jetzt bei längerem Druck auf die "zurück"-Taste eine Übersicht der aktuell "laufenden" apps. Ein wirklich schnelles Hin- und Herschalten (quasi Multitasking) aber ist noch nicht möglich, da es noch keine neuen apps gibt, die dies unterstützen.
Auf der Microsoft Research Team Seite resp. in deren paper resp. auf deren facebook-Seite stehen die neuen mit Mango kommenden Funktionen, u.a. Scripte als tile auf die Startseite zu pinnen.
Aktuell ist dies aber noch nicht möglich.
Gruß Jörg
-
Mich gibt's schon länger
- 21.07.2011, 18:24
- #140
Also irgendwie finde ich das nicht im MarketPlace.
Muss ich dafür Entwickler sein oder bin ich (bzw. mein Phone) einfach zu blöd dafür?
Mit der kostenlosen PocketPC.ch App von meinem LG-E900 aus geschrieben.
Ähnliche Themen
-
gekochte ROMs und Microsoft Dienste wie z.B. Microsoft MyPhone
Von gitarrero im Forum Touch HD ROM UpgradeAntworten: 6Letzter Beitrag: 02.06.2009, 14:02 -
Microsoft Research stellt neue Technologien vor
Von MuvOn im Forum PlaudereckeAntworten: 2Letzter Beitrag: 12.07.2004, 11:16
Pixel 10 Serie mit Problemen:...