Vytvořte si vlastní webovou hru

Podobné dokumenty
DEVFEST ANGULAR 2 WORKSHOP. angular.cz

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Ember.js. Jan Kopřiva, Vojtěch Jasný

ANGULAR 2 WORKSHOP. angular.cz

MVVM pro desktop i web

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Vývoj Internetových Aplikací

KIV/PIA 2012 Ing. Jan Tichava

JavaScript v praxi: Sokoban (5. přednáška)

PŘEHLED A MOŽNOSTI VYUŽITÍ WEBOVÝCH MAPOVÝCH SLUŽEB

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jazyk C# (seminář 9)

Úvod do FlexiBee REST API. Petr Ferschmann FlexiBee Systems s.r.o.

JSR tutorial 1 Úvod do JSR-184

Aplikace s grafickým uživatelským rozhraním

Programování v Javě I. Leden 2008

WPF 3D vjj 1

Apache Cordova (PhoneGap 3)

Algoritmizace a programování

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Notes and Domino Social Edition 9. David Marko, TCL DigiTrade

Tvorba přizpůsobivých webových rozhraní

ACV-Wars... The racing strategy Game design

Obsah. KAPITOLA 3 Základy: Strukturování dokumentů 33 Element article 35 Skládáme kousky dohromady 38

Uživatelské příkazy: false - dialog ukončen IDCANCEL. Vytvoří nové okno. title - titulek okna

KIV/PIA 2013 Jan Tichava

Programování v Javě I. Únor 2009

Úvodem Seznámení s HTML Rozhraní Canvas... 47

Michal Augustýn Microsoft Most Valuable Professional

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jazyk C# (seminář 6)

(JME) Vybrané partie z jazyka Java (NPRG021) Jiří Tomeš

Obsah. Proč právě Flash? 17 Systémové požadavky 17. Jak používat tuto knihu 18 Doprovodný CD-ROM 19

JAVA Unit testing Java, zimní semestr

Co nového přinese HbbTV 2.0

První kapitola úvod do problematiky

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Building Your Own Real Remote Experiment Controlled by a Mobile or Touch Enabled Device

Tvorba informačních systémů

HTML - Úvod. Zpracoval: Petr Lasák

HMI * nad webovými technologiemi

Printris. Hra Printris je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Fakulta aplikovaných věd. Katedra kybernetiky. Ping Pong. Martin Skála

Architektura softwarových systémů

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Tvorba webových stránek

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Iterator & for cyklus

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Kreslíme do webu. Canvas

Úvod do programovacích jazyků (Java)

Uživatelská. príručka. osvetlení, kine. telským prostr.. modelování, t. materiálu a tex. animaee III. III seznámení s K INFORMACÍM

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Kapitola 5 WCF, webové služby a mezidoménové zásady

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

Video ve státní správě

Obsah. SEZNÁMENÍ S HRAMI V HTML Nové funkce HTML Nové funkce CSS

Přepracované pásy karet Ikony jsou přehlednější a vzhled odpovídá ostatním aplikacím Autodesku.

HTML5, getusermedia a jeho využití pro práci s kamerou

Vývoj aplikací v Qt pro mobilní zařízení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Začínáme s vývojem pro Android

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Úvod do aplikací internetu a přehled možností při tvorbě webu

Programátorské večery. Tomáš Herceg Microsoft Student Partner

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Java aplety. Předávání parametrů z HTML

Enterprise Java Beans 3.0

CSS Stylování stránek. Zpracoval: Petr Lasák

Programování v jazyce JavaScript

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Enterprise Mobility Management AirWatch - představení řešení. Ondřej Kubeček březen 2017

TNPW1 Cvičení aneta.bartuskova@uhk.cz

ČERV. Hra Červ je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

2 Stručný průvodce Flamingem

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Programování shaderů GLSL

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Vývoj Internetových Aplikací

PV239/WP. Vývoj univerzálních Windows Store aplikací. Mgr. David Gešvindr MCSD: Windows Store MCSE: Data Platform MCT MSP

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Úvod do tvorby internetových aplikací

Proč Angular JS framework?

Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18

Možnosti aplikací Google pro analýzu (geo(

Publikujeme web. "Kam s ním?!"

Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze

(X)HTML, CSS a jquery

Richtext editory. Filip Dvořák

Cross- Site Request Forgery

Principy objektově orientovaného programování

HTML 5. Tomáš Hejl, Miroslav Štufka červen 2009

Prototyping konfigurace linuxových serverů. horizontální škálování Deltacloud API

Transkript:

Vytvořte si vlastní webovou hru Pavol Hejný OpenAlt 2017 1

Web vs. Desktop Výhody Přenositelnost (URL) Problémy Výkon Místo v uložišti prohlížeče "Seamfull" Další možnosti: Unity, (Flash, Java) 2

Browser APIs WebGL Pointer Lock API Fullscreen API WebWorkers WebSockets Messages Polyfill Hand.js 3

Canvas <canvas id=""></canvas> const Canvas = window.document.getelementbyid('' const ctx = canvas.getcontext("2d" ctx.fillstyle = '#ff0000'; ctx.beginpath( ctx.arc(10,10, 5, 0, Math.PI * 2, true ctx.closepath( ctx.fill( 4

2D vs. 3D 2D CanvasRenderingContext2D: Matter.js 3D WebGl: Babylon.js, Three.js, A Frame Další možnosti: 2D pomocí WebGL isometrie 5

UI (Canvas vs. html) React & MobX export default class UIDataModel { @observable health = 100; @observable energy = 50; } export default observer(({uidatamodel})=>{ return ( <div classname="counters"> <div classname="health"> {uidatamodel.health.tostring()} </div> <div classname="energy"> {uidatamodel.energy.tostring()} </div> </div> } 6

Fyzika Pouze gravitace vs. vše se vším Cannon.js, Oimo.js Binding např. pro Babylon.js 7

Realtime (vs. tahové) drawloop requestanimationframe(cb) vs. setinterval(cb,ms) performance.now() function drawloop(){ //update(... //render(... requestanimationframe(drawloop } requestanimationframe(drawloop 8

Multiplayer WebSockets Pouze ukládání výsledků na server 9

Babylon.js + Oimo.js https://www.babylonjs playground.com/#dcr6zg#5 https://github.com/hejny/3d project https://drive.google.com/file/d/1omhir3kcjljhgye7tydhhkpqz4lawvcl/view 10

Scéna const = new BABYLON.Scene(engine const camera = new BABYLON.FreeCamera( 'camera1', new BABYLON.Vector3(0, 5, 10), camera.attachcontrol(canvas, true camera.settarget(babylon.vector3.zero() const light = new BABYLON.HemisphericLight( 'light1', new BABYLON.Vector3(0, 1, 0),.enablePhysics( BABYLON.Vector3.Zero(), new BABYLON.OimoJSPlugin() 11

"Planeta" for(let z= 2;z<=2;z++){ for(let y=0;y<5;y++){ for(let x= 2;x<=2;x++){ const boxmesh = BABYLON.Mesh.CreateBox( 'box', 0.2, boxmesh.position = new BABYLON.Vector3( x*.2, (y+.5)*.2, z*.2 boxmesh.physicsimpostor = new BABYLON.PhysicsImpostor( boxmesh, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 1, restitution: 0.3 }, } } } 12

Asteroid const asteroidmesh = BABYLON.Mesh.CreateSphere( 'asteroid', 16, 0.33, asteroidmesh.position = new BABYLON.Vector3(0, 10,0 asteroidmesh.physicsimpostor = new BABYLON.PhysicsImpostor( asteroidmesh, BABYLON.PhysicsImpostor.SphereImpostor, { mass: 100, restitution: 0.3 }, asteroidmesh.physicsimpostor.setlinearvelocity( asteroidmesh.position.scale(.2) 13

Materiály Ambient Okolní konstantní osvětlení, co osvětluje předmět rovnoměrně bez ohledu na směr osvětlení. Diffuse Světlo rozptýlené do všech stran. Díky této složce je na předmětu vytvořený "3D efekt". Specular Světlo odrážející se převážně v jednom směru, co tvoří odlesk. Emissive Světlo vyzařované z meshe, hodí se např. pro vytvoření monitoru nebo kina ve scéně. 14

const material = new BABYLON.StandardMaterial( 'stone plain', const texture = new BABYLON.Texture( process.env.public_url +`/assets/textures/stone plain.jpg`, texture.uscale = 1; texture.vscale = 1; material.diffusetexture = texture; material.specularcolor = BABYLON.Color3.FromHexString('#ffeacb' material.emissivetexture = texture; mesh.material = material; mesh.material = materialfactory.getmaterial('stone plain' 15

Ground const groundmesh = BABYLON.Mesh.CreateGround( "ground", 1000, 1000, 2, groundmesh.material = materialfactory.getmaterial('grass' groundmesh.physicsimpostor = new BABYLON.PhysicsImpostor( groundmesh, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 0, restitution: 0.1}, 16

Brick export default class Brick{ public mesh:babylon.abstractmesh; constructor( private _world:world, private _materialname:string, private _physicalproperties:{mass:number,restitution:number}, private _size:babylon.vector3, private _position:babylon.vector3, private _rotation:babylon.vector3 = BABYLON.Vector3.Zero(), private _linearvelocity:babylon.vector3 = BABYLON.Vector3.Zero(), private _angularvelocity:babylon.vector3 = BABYLON.Vector3.Zero(), ) 17

const globalscale = 10; const width = this._size.x; const height = this._size.y; const depth = this._size.z; const faceuv = [ new BABYLON.Vector4(0, 0, width / globalscale, height / globalscale), new BABYLON.Vector4(0, 0, width / globalscale, height / globalscale), new BABYLON.Vector4(0, 0, height / globalscale, depth / globalscale), new BABYLON.Vector4(0, 0, height / globalscale, depth / globalscale), new BABYLON.Vector4(0, 0, depth / globalscale, width / globalscale), new BABYLON.Vector4(0, 0, depth / globalscale, width / globalscale), ]; const meshoptions = {width, height, depth, faceuv}; this.mesh = BABYLON.MeshBuilder.CreateBox('BoxBrick', meshoptions, this._world.s this.mesh.material = this._world.materialfactory.getmaterial(this._materialname) this.mesh.physicsimpostor = new BABYLON.PhysicsImpostor( this.mesh, BABYLON.PhysicsImpostor.BoxImpostor, this._physicalproperties, this._world. 18

Děkuji za pozornost www.pavolhejny.com www.webappgames.com https://hejny.github.io/3d project/ https://github.com/hejny/3d project https://www.babylonjs playground.com/#dcr6zg#5 https://www.itnetwork.cz/vytvor si vlastni webovou hru/ 19