Sieciowe Technologie Mobilne. Laboratorium 2

Podobne dokumenty
Sieciowe Technologie Mobilne. Laboratorium 4

Sieciowe Technologie Mobilne. Laboratorium 1

Unity 3D - własny ekran startowy i menu gry

Dynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz

Programowanie obiektowe

Programowanie obiektowe

Unity 3D - pierwsze skrypty

Programowanie obiektowe

WASM AppInventor Lab 3. Rysowanie i animacja po kanwie PODSTAWY PRACY Z KANWAMI

Dodawanie grafiki i obiektów

Aplikacje WWW - laboratorium

Uniwersytet Łódzki dla dzieci

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

INSTRUKCJA DO ĆWICZENIA 13. Animacja wielowątkowa w aplikacjach JME. Gra logistyczna.

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Język Java część 2 (przykładowa aplikacja)

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

Język Java część 2 (przykładowa aplikacja)

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Ćwiczenia z przetwarzania tablic 2D

Technologie i usługi internetowe cz. 2

MIKROKONTROLERY ARM DOKUMENTACJA WSTĘPNA PROJEKTU GRA PONG

Dodanie nowej formy do projektu polega na:

Laboratorium Programowanie urządzeń mobilnych

Lekcja 11 Gra komputerowa LASER

Ćwiczenie 22 Dynamiczne wczytywanie tekstu z pliku.txt

Pliki zorganizowano w strukturze drzewiastej odzwierciedlając strukturę logiczną aplikacji:

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Programowanie aplikacji na urządzenia mobilne

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Laboratorium Systemów Informacji Przestrzennej. Korzystanie z zewnętrznych usług geokodowania i nawigacji w środowisku OpenLayers

Języki programowania imperatywnego

Ćwiczenie 1 Automatyczna animacja ruchu

Laboratorium 7 Blog: dodawanie i edycja wpisów

PyGame Gra w Ponga. Spis treści


Podstawy technologii cyfrowej i komputerów

Aplikacje WWW - laboratorium

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 1

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski

Mechanizm dziedziczenia

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

Zastosowania Robotów Mobilnych

Ćwiczenie 1 Galeria zdjęć

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Programowanie obiektowe

Tworzenie szablonów użytkownika

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Grafika Komputerowa Materiały Laboratoryjne

Microsoft PowerPoint 2003 efektywne tworzenie i prezentacji multimedialnych

- dodaj obiekt tekstowy: /** Maciej */ Stage { title : "First JavaFX App" scene: Scene { width: 300 height: 300 content: [ ] } }

Laboratorium 9 (Więcej Aktywności, w Androidzie)

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 3

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012. Przygotowanie do druku

Wymagania edukacyjne na ocenę z informatyki klasa 3

Tworzenie prostych gier w programie GameMaker

Misja#3. Robimy film animowany.

Tworzenie prezentacji w MS PowerPoint

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Rys.2.1. Drzewo modelu DOM [1]

#UczymyDzieciProgramować #ZadanieWprogramie

Ćwiczenie 5 Animacja tekstu

Maskowanie i selekcja

Programowanie obiektowe

Badanie ruchu złożenia

Zad. 6: Sterowanie robotem mobilnym

Aplikacje w środowisku Java

Specyfikacja techniczna

Podstawowe elementy GUI cz. 2 i 3 - zadania

Laboratorium 5: Tablice. Wyszukiwanie binarne

Programowanie obiektowe. Wykład 4

Zajęcia nr 15 JavaScript wprowadzenie do JavaScript

Musimy do naszej gry załadować materiały. Są to trzy obrazki:

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

Multimedia i interfejsy. Ćwiczenie 5 HTML5

Kurs WWW. Paweł Rajba.

Przy dużej wielkości głębokości uzyskamy wrażenie nieskończoności: Dla głębokości zerowej uzyskamy tekst płaski:

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

Przewodnik po obszarze roboczym

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Wprowadzenie do projektu QualitySpy

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania

Baner internetowy w standardzie GIF - metoda tworzenia tandemem aplikacji Illustrator - ImageReady.

Tworzenie i edycja dokumentów w aplikacji Word.

Aplikacje WWW - laboratorium

PHP 5 język obiektowy

Programowanie obiektowe

Transkrypt:

Sieciowe Technologie Mobilne Laboratorium 2 Tworzenie wieloplatformowych aplikacji mobilnych przy użyciu biblioteki PhoneGap. Łukasz Kamiński

Laboratorium 2 Na dzisiejszym laboratorium skupimy się na implementacji klas Sprite oraz AnimatedSprite. 1.1. Implementacja klasy Sprite. Na poprzednich zajęciach stworzyliśmy pierwszy samodzielny, ruszający się obiekt gry. Wraz ze wzrostem złożoności aplikacji pojawiać się będą kolejne zachowania obiektów gry. Warto zatem zdefiniować klasę, która przejmie odpowiedzialność za właściwości i metody obiektów gry. W wielu silnikach do tworzenia gier 2D klasy tego typu zwykło się nazywać Sprite'ami. Wykorzystaj poniższy kod, jako szkielet klasy Sprite, którą będziesz implementował jako element biblioteki, w pliku lab.js. /**Sprite ruszający się obiekt z obrazkową, graficzną reprezentacją.*/ kamyk.sprite = Class.$extend({ /**Konstruktor*/ init : function(x, y) { //Współrzędne rogu sprite'a this.x = x; this.y = y; //Rozmiary sprite'a this.sizex = 1; this.sizey = 1; //odległości od rogu do środka sprite'a na razie błędne wartości this.midxoffset = 1; this.midyoffset = 1; //prędkość this.speed = 1; //czy się rusza

this.ismoving = false; //obrazek this.image = undefined; /**Tę metodę wywoła ImageLoader z laboratorium 1.*/ setimage: function(img) { this.image = img; this.resize(this.image.width,this.image.height); /**Zmiana rozmiaru*/ resize: function(newwidth,newheight) { this.sizex = newwidth; this.sizey = newheight; this.midxoffset = Math.floor(this.sizeX / 2); this.midyoffset = Math.floor(this.sizeY / 2); this. middlecoordsinit(); /**Zmiana współrzędnych środka*/ middlecoordsinit: function() { this.midx = this.x + this.midxoffset; this.midy = this.y + this.midyoffset; /**Rysowanie*/ render: function(ctx) { if (this.image!== undefined) { ctx.drawimage(this.image, Math.floor(this.x), Math.floor(this.y), this.sizex, this.sizey); update: function(dt) { //limit darmowego kodu do wklejenia został przekroczony... ;) ); Przekształć kod klasy MonsterShooter z poprzedniego laboratorium, aby używał klasy Sprite. Zmień sposób tworzenia obiektów gry: this.hero = new kamyk.sprite(40, 40); ładowania obrazków (wykorzystaj właściwość imagereceiver klasy ImageLoader): this.imageloader.addurl("img/mage.jpg", this.hero); oraz rysowania i aktualizacji obiektów: this.hero.render(this.context); this.hero.update(dt); Spraw, aby obiekt poruszał się kolejno wzdłuż wszystkich czterech krawędzi ekranu. Wzbogać go o odpowiednie metody, odpowiedzialne za obliczanie odległości do celu, zmianę współrzędnych,

ustalanie kolejnego celu do osiągnięcia. Wykorzystaj te metody, by odpowiednio zaimplementować metodę update(). 1.2. Implementacja klasy AnimatedSprite. Kolejnym zadaniem do realizacji jest zapewnienie animacji obiektów gry. Klasycznym sposobem na realizację tego zadania jest dostarczenie obrazka, który zawiera niezbędne klatki animacji, ułożone w formie regularnej tablicy. Animacja polega na regularnym podmienianiu wybranych klatek animacji w trakcie rysowania obiektu. Poniżej zamieszczono przykładowy obrazek z 12 klatkami animacji, ułożonymi w 4 wierszach i 3 kolumnach. Dygresja Używanie osobnych obrazków dla każdego z obiektów gry nie jest optymalne podejście to zostało przedstawione, aby nieco uprościć proces tworzenia gry na laboratorium. Bardziej właściwym podejściem jest przygotowanie pojedynczego pliku graficznego, zawierającego wszystkie niezbędne zasoby graficzne. Plik taki bywa często nazywany atlasem. http://www.altdevblogaday.com/2012/09/17/building-an-html5-game-dont-shrug-off-atlases/ Wykorzystaj poniższy kod, jako szkielet klasy AnimatedSprite, którą będziesz implementował jako element biblioteki, w pliku lab.js. Zauważ, że nowa klasa dziedziczy po Sprite. /**Animowany obiekt gry*/ kamyk.animatedsprite = kamyk.sprite.$extend({ /**Konstruktor z dodatkowymi parametrami - ilością kolumn i rzędów w obrazku z animacjami*/ init : function(x, y, numcol, numrow) { this.$super(x, y); //liczba kolumn obrazka this.cols = numcol; //liczba wierszy obrazka this.rows = numrow; //co ile ms podmieniać obrazek(klatkę) animacji this. framechangedt = 50; //ile czasu jest już wyświetlany aktualny obrazek(klatka) animacji this. curframetime = 0; //indeks aktualnej klatki animacji this. curframeind = 0; // ramki /klatki animacji domyślnie pierwsza ramka obrazka this.frames = [0]; //czy zapętlać animację this.loopanim = true; //czy wstrzymać animację this.stopanim = false; /**Zmodyfikowana wersja metody setimage() -> rozmiar nie może już być rozmiarem obrazka*/

setimage: function(img) { this.image = img; this.sizex = Math.floor(this.image.width / this.cols); this.sizey = Math.floor(this.image.height / this.rows); this.midxoffset = this.sizex / 2; this.midyoffset = this.sizey / 2; this. middlecoordsinit(); /**Ustala, które części obrazka mają brać udział w animacji*/ setanimationframesseq: function(framenumbers) { this.frames = framenumbers; this. curframetime = 0; this. curframeind = 0; this.curframe = this.frames[this. curframeind]; /**Rysuje w odpowiednim miejscu (x,y) odpowiedni fragment obrazka*/ render: function(ctx) { if (this.image!== undefined) { var xframe = (this.curframe % this.cols) * this.sizex; var yframe = Math.floor(this.curFrame / this.cols) * this.sizey; ctx.drawimage(this.image, xframe, yframe, this.sizex, this.sizey, Math.floor(this.x), Math.floor(this.y), this.sizex, this.sizey ); update: function(dt) { //limit darmowego kodu do wklejenia znowu został przekroczony... ;) ); Niech poruszający się po ekranie obiekt będzie od tej pory obiektem klasy AnimatedSprite. Spraw, aby w trakcie poruszania obiekt ten był animowany. ZADANIE Zadanie do wykonania polega na wyświetleniu z wykorzystaniem obiektu <canvas> prostej sceny, zawierającej obrazek tła oraz animowany obiekt poruszający się wzdłuż kolejnych krawędzi ekran. Animacja ma być realizowana w oparciu o plik graficzny zawierający klatki animacji. Punktacja: 1 pkt. - modyfikacja kodu z poprzedniego laboratorium, aby funkcjonował w oparciu o klasę Sprite; poruszanie się wzdłuż krawędzi ekranu 2 pkt. - modyfikacja ruszającego się obiektu gry, aby wykorzystywał klasę AnimatedSprite do zapewnienia animacji opartej na podmianie klatek 2 pkt. - implementacja kodu zgodnie z wymaganiami z instrukcji: podział na bibliotekę i grę właściwą, symulowanie klas w JavaScript