Piłką na platformach i przez teleporty. Andrzej P.Urbański Wydział Informatyki Politechnika Poznańska

Podobne dokumenty
Unity 3D - podpowiedzi w grze. System cząstek

SSW1.1, HFW Fry #20, Zeno #25 Benchmark: Qtr.1. Fry #65, Zeno #67. like

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

SG-MICRO... SPRĘŻYNY GAZOWE P.103

Stargard Szczecinski i okolice (Polish Edition)

Unity 2D - prosta gra

Unity 3D - pierwsze skrypty

Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

SG-R... SPRĘŻYNY GAZOWE P (2 x S) 60+(2 x S) 42/45+(2 x S) 50+(2 x S) 32+(2 x S) 38+(2 x S) P.67 P.68 P.69 P.70 P.71 P.72

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

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

Helena Boguta, klasa 8W, rok szkolny 2018/2019

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Pierwszy program. else1 <html> <body> <script type="text/javascript"> var d = new Date()

Programowanie gier 3D w HTML5. Andrzej P.Urbański Politechnika Poznańska

OpenPoland.net API Documentation

Oracle PL/SQL. Paweł Rajba.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

MaPlan Sp. z O.O. Click here if your download doesn"t start automatically

Zestawienie czasów angielskich

Unity. Platforma do tworzenia gier dla różnych systemów docelowych, m.in.: Windows, macos, ios, Android, Powstała w 2005 r., obecnie wersja 5.3.

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Defilada - przykład wykorzystujący animowane modele Copperlicht. Andrzej P.Urbański Politechnika Poznańska

PODSTAWY BAZ DANYCH 13. PL/SQL

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Bazy Danych i Usługi Sieciowe

Hard-Margin Support Vector Machines

Wstęp. Ale po co? Implementacja

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

How to share data from SQL database table to the OPC Server? Jak udostępnić dane z tabeli bazy SQL do serwera OPC? samouczek ANT.

Machine Learning for Data Science (CS4786) Lecture 24. Differential Privacy and Re-useable Holdout

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Volcano MC-GM4 OPTICAL MOUSE USER S MANUAL MODECOM

Revenue Maximization. Sept. 25, 2018

Tychy, plan miasta: Skala 1: (Polish Edition)

MS Visual Studio 2005 Team Suite - Performance Tool

Volcano MC-GMX4 OPTICAL MOUSE USER S MANUAL MODECOM

Krótki kurs JavaScript

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

Unity 3D - efekty strzelania, koniec gry

SQL 4 Structured Query Lenguage

Hurtownia Świętego Mikołaja projekt bazy danych

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

DODATKOWE ĆWICZENIA EGZAMINACYJNE

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

BAZA DANYCH SIECI HOTELI

Camspot 4.4 Camspot 4.5

INSTRUKCJA MONTAŻU MARBO E SPORT LISTA CZĘŚCI (PARTS LIST) (ASSEMBLY INSTRUCTION) MH-W102 NR CZĘŚCI (PART NO.) ILOŚĆ (QUANTITY) OPIS (DESCRIPTION)

Gry Komputerowe - laboratorium 2. Kamera FPP / TPP. mgr inż. Michał Chwesiuk 1/11. Szczecin, r

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Multimedia i interfejsy. Ćwiczenie 5 HTML5

Analysis of Movie Profitability STAT 469 IN CLASS ANALYSIS #2

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Electromagnetism Q =) E I =) B E B. ! Q! I B t =) E E t =) B. 05/06/2018 Physics 0

Machine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis

Programowanie WEB Lista nr 10 (termin ) mgr inż. Adam Dudek

X11R5. .Xresources. Pliki konfiguracyjne X-Windows. Zasada działania X11. .xinitrc. X protocol X server. X client. X library

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

Zasoby. Musimy zaimportować zasoby dla gry z Asset Store

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)

Linear Classification and Logistic Regression. Pascal Fua IC-CVLab

Niepubliczne Przedszkole i Żłobek EPIONKOWO

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

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

OSTC GLOBAL TRADING CHALLENGE MANUAL

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Estimation and planing. Marek Majchrzak, Andrzej Bednarz Wroclaw,

Emilka szuka swojej gwiazdy / Emily Climbs (Emily, #2)

Extraclass. Football Men. Season 2009/10 - Autumn round

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Zaawansowane Aplikacje Internetowe

Test sprawdzający znajomość języka angielskiego

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

1. CZYM JEST SERIALIZACJA

Surname. Other Names. For Examiner s Use Centre Number. Candidate Number. Candidate Signature

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

Cele. Definiowanie wyzwalaczy

Angielski bezpłatne ćwiczenia - gramatyka i słownictwo. Ćwiczenie 8

FOREST DIAMOND Pilot radiowy X460

Funkcje i instrukcje języka JavaScript

Angielski bezpłatne ćwiczenia - gramatyka i słownictwo. Ćwiczenie 1

XML extensible Markup Language. część 5

PRESENT TENSES IN ENGLISH by

Zwora Yale US06. Yale seria US kg. Zastosowanie. Właściwości. Parametry techniczne

tum.de/fall2018/ in2357

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Egzamin maturalny z języka angielskiego na poziomie dwujęzycznym Rozmowa wstępna (wyłącznie dla egzaminującego)

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Transkrypt:

Piłką na platformach i przez teleporty Andrzej P.Urbański Wydział Informatyki Politechnika Poznańska

Play Canvas system programowania gier Zintegrowane narzędzia do tworzenia obiektów 3D, skryptów JavaScript i programów GLCS Wbudowane modelowanie fizyki ciał rzeczywistych: sprężystość, uginanie, oddziaływanie grawitacji

Modele kształty obiektów

Materiały - sprężystość

Tekstury wzory graficzne

Skrypty JavaSript z API PC

Kształt obiektu Obiektowość Wygląd zewnętrzny Interakcja z innymi obiektami (collision) Siła ciążenia i bezwładności (rigid body=dynamic) Skrypty nadające indywidualne cechy

Atrybuty Zarówno predefiniowane obiekty jak skrypty mają atrybuty, które można ustawiać w trakcie dodawania obiektu W definicji skryptu można deklarować atrybuty, które ujawnią się po przypisaniu skryptu do obiektu

Obiekty zabawy z piłką Platformy, po których można kulać piłkę Piłka Teleport, który przenosi piłkę Kamera, która sterowana skryptem dokładnie pokazuje piłkę i najbliższe otoczenie

Platforma

Ball

Teleport

Camera Follow.js Śledzi piłkę Ball Kursory ją pchają Movement.js Teleportable.js Jak i dokąd przenosi teleport Teleport Teleport.js Aby teleport ją przeciągnął

W każdej grze kamera śledzi miejsce akcji W każdej grze jest obiekt, z którym gracz może się utożsamić, bo wprawia go w ruch kursorami bądź myszką Niezwykłość teleportów przenoszenie ludzi i przedmiotów realizuje specjalnie opracowany skrypt teleport.js, który wie w jakie miejsce ma nastąpić przeniesienie

Budowa przestrzeni gry 1 Przestrzeń gry można budować bez ingerowania w skrypty Zestawiając platformy Tworząc teleport Przez z duplikowanie niebeiskiego lub zielonego albo Tworząc cylinder kilknąć + w hierarchy add cylinder Ustawić skalę x=0.5, y=0.05, z=0.5 Wstawić w Model material teleport-a lub teleport-b W przypadku teleportu niebieskiego(wejściowego) dołączyć skrypt teleport.js z atrybutem wskazującym teleport wyjściowy dla niego

Budowa przestrzeni gry 2 Ustawiając odpowiednio teleporty: niebieski jako wynoszący, zielony jako przynoszący Każdy teleport powinien mieć unikalną nazwę W niebieskim teleporcie koniecznie trzeba ustawić atrybut skryptu Target entity na teleport, do którego nastąpi przeniesienie

Budowa skryptu PC: atrybuty, tworzenie, działanie pc.script.attribute( nazwa', 'number',1,{min:0,max:5,step:0.5,decimalprecision:2); pc.script.create( nazwa', function (app) { var nazwa= function (entity) { this.entity = entity; this.force = new pc.vec3(); ; nazwa.prototype = { return nazwa; );

// The target entity where we are going to teleport pc.script.attribute('target', 'entity', null, { ); displayname: 'Target Entity' pc.script.create('teleport', function (app) { var Teleport = function (entity) { ; this.entity = entity; Teleport.prototype = { initialize: function () { if (this.target) { // Subscribe to the triggerenter event of this entity's collision component. // This will be fired when a rigid body enters this collision volume. this);, this.entity.collision.on('triggerenter', this.ontriggerenter, Teleport { entity ontriggerenter: function (otherentity) // it is not teleportable if (! otherentity.script.teleportable) return; // teleport entity to the target otherentity.script.teleportable.teleport(thi s.entity, this.target); ; return Teleport; );

pc.script.create('teleportable', function (app) { var Teleportable = function (entity) { this.entity = entity; this.startposition = null; this.lastteleportfrom = null; this.lastteleportto = null; this.lastteleport = Date.now(); ; Teleportable.prototype = { // Called once after all resources are loaded and before the first update initialize: function () { this.startposition = this.entity.getposition().clone();, update: function() { // Make sure we don't fall over. If we do then // teleport to the last location var pos = this.entity.getposition(); if (pos.y < 0) { this.teleport(this.lastteleportfrom, this.lastteleportto);, teleport: function(from, to) { Teleportable // set new teleport time this.lastteleport = Date.now(); // set last teleport targets this.lastteleportfrom = from; this.lastteleportto = to; // position to teleport to var position; if (to) { // from target position = to.getposition(); // move a bit higher position.y += 0.5; else { // to respawn location position = this.startposition; // move ball to that point this.entity.rigidbody.teleport(position); // need to reset angular and linear forces this.entity.rigidbody.linearvelocity = pc.vec3.zero; this.entity.rigidbody.angularvelocity = pc.vec3.zero; // can't teleport too often (500ms) if (from && (Date.now() - this.lastteleport) < 500) ; return; return Teleportable; );

// Controls the movement speed pc.script.attribute('speed', 'number', 0.1, { min: 0.05, max: 0.5, step: 0.05, decimalprecision: 2 ); movement if (app.keyboard.ispressed(pc.key_up)) { forcez = -this.speed; if (app.keyboard.ispressed(pc.key_down)) { forcez += this.speed; // Script Definition pc.script.create('movement', function (app) { this.force.x = forcex; this.force.z = forcez; // Creates a new Movement instance var Movement = function (entity) { this.entity = entity; this.force = new pc.vec3(); ; Movement.prototype = { // Called every frame, dt is time in seconds since last update update: function (dt) { var forcex = 0; var forcez = 0; // calculate force based on pressed keys if (app.keyboard.ispressed(pc.key_left)) { forcex = -this.speed; // if we have some non-zero force if (this.force.length()) { // calculate force vector var rx = Math.cos(-Math.PI * 0.25); var ry = Math.sin(-Math.PI * 0.25); this.force.set(this.force.x * rx - this.force.z * ry, 0, this.force.z * rx + this.force.x * ry); // clamp force to the speed if (this.force.length() > this.speed) { this.force.normalize().scale(this.speed); // apply impulse to move the entity this.entity.rigidbody.applyimpulse(this.force); if (app.keyboard.ispressed(pc.key_right)) { ; forcex += this.speed;

// The entity to follow pc.script.attribute('target', 'entity', null, { displayname: 'Target' ); // How far from the entity should the follower be pc.script.attribute('distance', 'number', 4); // Script Definition pc.script.create('follow', function (app) { // Creates a new Follow instance var Follow = function (entity) { this.entity = entity; this.vec = new pc.vec3(); ; follow Follow.prototype = { // Called every frame, dt is time in seconds since last update update: function (dt) { if (!this.target) return; // get the position of the target entity var pos = this.target.getposition(); // calculate the desired position for this entity pos.x += 0.75 * this.distance; pos.y += 1.0 * this.distance; pos.z += 0.75 * this.distance; // smoothly interpolate towards the target position this.vec.lerp(this.vec, pos, 0.1); // set the position for this entity this.entity.setposition(this.vec); ; return Follow; );