V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements


1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
3 5 6 Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property System Input & Eventing BASE SERVICES.
AZ OOP ALAPJAI.
2 3.NET Framework 3.0 Visual Studio Extensions for WF Visual Studio Extensions for WCF/WPF CTP ASP.NET AJAX 1.0 Ajax Toolkit.NET Framework 3.5 Visual.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt fejlesztőrendszerek Felhasználói felületek Balogh András.
3D képszintézis fizikai alapmodellje
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
FelültöltésVHDL Felültöltés (Overloading) n Áttekintés n Példák.
 Gauss szűrő uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; void main(){
Socket programozás Példák
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
© Kozsik Tamás Párhuzamosság A program egyszerre több mindent is csinálhat Lehetőségek: –Számítással egyidőben IO –Több processzor: számítások.
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
Természetesen P = Q = O esetén O + O = O. Tetszőleges, nem 2, vagy 3 karakterisztikájú test esetén hasonló módon eljárva E(K)-n zárt műveletet.
A Q-learning módszer alkalmazása NXT robotok irányítására.
PHP VI Adatbázisok, MySQL
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Eye-RIS rendszer programozása D46 laborgyakorlat.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek SWT haladó komponensek.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Vizuális programozás Rajzolás Windows Forms alkalmazásokban GDI+
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Motor IIII. Vezérlés Szécsi László. Letöltés diák: //l09-engine4.ppt.
Motor II. Env map Spotlight Szécsi László. Letöltés /code/E/code/EggCoreSecondBase.zip Kibontani (vagy előző labor folyt.):
Transzformációk, textúrák, árnyalás Szécsi László.
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
OIS. Kezdeti teendők Letöltés: OgreLabControllersBase.zip Kicsomagol, betölt:.sln Additional include és library path beállítása Working directory beállítása.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
Kamera, 3D, transzformációk Szécsi László. Math.zip kibontása az Egg projectkönyvtárba – float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
 Map  Reduce  Scan  Histogram  Compact const size_t dataSize = 1024; cl_kernel mapKernel = cl.createKernel(clProgram, "map"); float* hData = new.
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU labor IX. Lineáris egyenletrendszerek megoldása.
GPGPU Labor 15.. Párhuzamos primitívek Map Reduce Scan Histogram Compact.
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
Java programozási nyelv Filekezelés
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Fejlett Webes Technológiák II.
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Thread és Task.
Előadás másolata:

V. labor Thread, animáció

Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé. modell kiegészítés – mozgatott figura pozíciója – dropPiece nem rakja le a figurát, csak majd az animáció után view kiegészítés – ki kell rajzolni az aktuális pozícióba a mozgatottat controller kiegészítés – kell egy szál ami időnként szól a modellnek hogy mozdítsa odébb a figurát Ne barmoljunk bele az eddigiekbe AnimatedChessboard extends Chessboard AnimatedView extends ImageView AnimationController

Új class: AnimatedChessboard import java.awt.geom.Point2D; public class AnimatedChessboard extends Chessboard { // hány msec legyen egy lépés private static final int animationDuration = 2000; private Square moveFinishSquare = null; private boolean animating = false; private int animationTime; public boolean isAnimating(){return animating;} protected void finishMove(Square toSquare) { moveFinishSquare = toSquare; animating = true; animationTime = 0; }// folyt köv.

folyt: AnimatedChessboard public void finishAnimation() { animating = false; super.finishMove(moveFinishSquare); } public boolean step(int deltaTime) { animationTime += deltaTime; if (animationTime > animationDuration) { finishAnimation(); return false; } return true; }

vége: AnimatedChessboard public Piece getAnimatedPiece() { return grabbedPiece; } public Point2D.Float getAnimatedPiecePosition() { float t = (float) animationTime / animationDuration; return new Point2D.Float( moveStartSquare.file * (1 - t) + moveFinishSquare.file * t, moveStartSquare.rank * (1 - t) + moveFinishSquare.rank * t); }

Új class: AnimatedView import java.awt.*; import java.awt.geom.Point2D; import java.awt.image.BufferStrategy; public class AnimatedView extends ImageView { private AnimatedChessboard board; public AnimatedView(AnimatedChessboard board){ super(board); this.board = board; } public void paint(Graphics g) { super.paint(g); if (board.isAnimating()){ Point2D.Float animatedPiecePos = board.getAnimatedPiecePosition(); Piece grabbedPiece = board.getAnimatedPiece(); String key = grabbedPiece.toString(); Image im = pieceImages.get(key); g.drawImage(im, 19 + (int) (animatedPiecePos.x * 50), 19 + (int) ((7 - animatedPiecePos.y) * 50), null); }

Új class: AnimatedController import java.awt.*; import java.awt.event.*; public class AnimatedController { private AnimatedView view; private AnimatedChessboard board; public AnimatedController() { board = new AnimatedChessboard(); view = new AnimatedView(board); view.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getY() 20 && e.getX() 20) { Square s = new Square((e.getX() - 20) / 50, 7 - (e.getY() - 20) / 50); squareClicked(s); } }); }

Új: AnimatedController. createFrame public void createFrame() { Frame frame = new Frame("Chess"); frame.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.add(view); frame.setSize(450, 600); frame.setResizable(false); frame.setVisible(true); }

új AnimatedController. squareClicked public void squareClicked(Square square) { if (!board.isPieceGrabbed()) { if (!board.grabPiece(square)) { view.printMessage("Invalid starting square!"); } else { view.printMessage("Click destination square!"); } } else { if (board.dropPiece(square)) { board.finishAnimation(); } else { view.printMessage("Invalid destination square, move cancelled!"); } view.display(); }

Chess.main public static void main(String[] args) { // TODO code application logic here System.out.println("!!!! Starting chess game !!!!"); //new ConsoleController(); //(new ButtonController()).createFrame(); //(new ImageController()).createFrame(); (new AnimatedController()).createFrame(); }

Próba ugyanúgy működik, mint az ImageView-os nincs animáció egyelőre – nem hívjuk az AnimatedChessboard.step-et – rendszeresen, mondjuk 40 msec-enként kéne hívni – erre létrehozunk egy szálat (Thread)

Belső osztály az AnimatedController -ben class AnimationThread extends Thread{ public void run(){ try { while (board.step(40)) { //míg nincs vége az animációnak view.display(); sleep(40); } } catch (InterruptedException ie) { } finally { view.display(); if (board.getWhiteOnTurn()) { view.printMessage("White to move!"); } else { view.printMessage("Black to move!"); } // meg egy ilyen típusú mező is kell AnimationThread animationThread;

AnimatedController. squareClicked public void squareClicked(Square square) { if (board.isAnimating()) { board.finishAnimation(); animationThread.interrupt(); } if (!board.isPieceGrabbed()) { if (!board.grabPiece(square)) { view.printMessage("Invalid starting square!"); } else { view.printMessage("Click destination square!"); } } else { if (board.dropPiece(square)) { board.finishAnimation(); animationThread = new AnimationThread(); animationThread.start(); } else { view.printMessage("Invalid destination square, move cancelled!"); } view.display(); }

Próba animál de villog dupla buffer kell

AnimatedController. createFrame végére view.createBufferStrategy(2);

Új metódus: AnimatedView. update public void update(Graphics g) { BufferStrategy bf = getBufferStrategy(); Graphics dg = bf.getDrawGraphics(); dg.clearRect(0, 0, getWidth(), getHeight()); paint(dg); dg.dispose(); bf.show(); }

Próba nem villog

Önálló feladat legyen simább a mozgás – getAnimatedPiecePosition – továbbra is a két végpont lineárkombinációja az aktuális pozíció – de nem lineárisan interpolálunk, hanem harmadfokú spline-nal – a súlyok: 1-(3t 2 – 2t 3 ) és 3t 2 – 2t 3 legyen a mozgás sokkal gyorsabb – 800 vagy 400 vagy 200 msec az animáció hossza 4 perc

V. labor vége – szorgalmi feladat amikor megfogtunk egy figurát, de még nem raktuk le, akkor az egeret kövesse – grabPiece végén vegyük le a tábláról – egérmozgás eseményt figyeljük és jegyezzük meg az egérpozíciót – ha épp lépésben vagyunk (van megfogott figura, de még nem animálunk), rajzoláskor rajzoljuk a fogott figurát az egérhez drag&drop lépéssel is lehet próbálkozni