Μάθημα 6 Μετασχηματισμοί στο αντικείμενο Canvas. Μετασχηματισμοί / transforms Method Περιγραφή scale()Κλιμάκωση. Το τρέχον σχέδιο γίνεται μεγαλύτερο ή.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τεχνολογία ΛογισμικούSlide 1 Έλεγχος Καταψύκτη (Ada) Τεχνολογία ΛογισμικούSlide 39 with Pump, Temperature_dial, Sensor, Globals, Alarm; use Globals ; procedure.
Advertisements

Rigidbody Δίνει στο αντικείμενο την ιδιότητα της μάζας, της βαρύτητας και της ταχύτητας Μπορούμε να επέμβουμε στη δύναμη της βαρύτητας στη σκηνή μας (διεύθυνση.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Unity Εργαστήριο 02 Δημιουργία αντικειμένων κατά το gameplay.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Asynchronous Javascript And XML (AJAX) Γιώργος Θάνος Παρασκευή 21 Νοεμβρίου 2008.
ΣΥΝΑΡΤΗΣΙΑΚH JAVASCRIPT. Στόχος της ώρας Συναρτήσεις σε Javascript Συναρτήσεις ως τιμές Συναρτήσεις ως παράμετροι Επιστροφή συναρτήσεων Αντικειμενοστραφής.
Week 11 Quiz Sentence #2. The sentence. λαλο ῦ μεν ε ἰ δότες ὅ τι ὁ ἐ γείρας τ ὸ ν κύριον Ἰ ησο ῦ ν κα ὶ ἡ μ ᾶ ς σ ὺ ν Ἰ ησο ῦ ἐ γερε ῖ κα ὶ παραστήσει.
Μάθημα 9 Λίγο απ’ όλα! HTML 5 Advanced PHP XML. HTML 5 Πρόκειται για μια νέα έκδοση της HTML που συμπληρώνει τις δυνατότητες της γλώσσας με κάποια Tags.
Αριθμητική Επίλυση Διαφορικών Εξισώσεων 1. Συνήθης Δ.Ε. 1 ανεξάρτητη μεταβλητή x 1 εξαρτημένη μεταβλητή y Καθώς και παράγωγοι της y μέχρι n τάξης, στη.
Προγραμματιστικά Εργαλεία για το Διαδίκτυο Πολυμεσικά στοιχεία σε μια σελίδα 1 © Βελώνης Γεώργιος – Καθηγητής Πληροφορικής ΠΕ20 Βελώνης Γεώργιος - Καθηγητής.
1 Εισαγωγή στην επιστήμη των υπολογιστών Υπολογιστές και Δεδομένα Κεφάλαιο 4ο Πράξεις με μπιτ.
Προγραμματισμός Εφαρμογών Διαδικτύου Ενότητα 4: JavaScript – Παραδείγματα (Τα απολύτως απαραίτητα για Form Validation) Φώτης Κόκκορας, Καθηγητής Εφαρμογών,
Σπύρος Πρασσάς Πανεπιστήμιο Αθηνών Μηχανικές αρχές και η εφαρμογή τους στην Ενόργανη Γυμναστική PP #4.
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού - Κλάσεις ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014:
HTML/CSS: Εισαγωγή Θερινό Σχολείο, 14 – 20 Ιουλίου 2014 Γιώργος Φουρτούνης Μονάδα Αριστείας ΕΛ/ΛΑΚ ΤΕΙ Αθήνας.
Μάθημα 8 Session και Cookies. Session Το HTTP πρωτόκολλο είναι stateless. Άρα το HTTP δεν έχει μνήμη. Αυτό σημαίνει ότι εάν έχω μια μεταβλητή που την.
Το αντικείμενο Canvas Ιδιότητες και μέθοδοι
Εισαγωγή στον Προγ/μό Η/Υ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Διευθύνσεις και Πρωτόκολλα στο διαδίκτυο
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Η Γλώσσα Pascal Εντολή If
Το αντικείμενο Canvas Ιδιότητες και μέθοδοι Μέρος Β’
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Κλάσεις 1/4 Η κλάση είναι μια λογική οντότητα οργάνωσης δεδομένων και λειτουργιών στην ίδια δομή. Η δήλωσή της γίνεται με τη λέξη κλειδί class, του οποίου.
Client Side Προγραμματισμός Javascript
Ενότητα Εισαγωγή Είναι εύκολη στη χρήση και στην εκμάθηση.
Μάθημα 7 Φόρμες IΙ.
Πόσο ψηλός είσαι; Εισάγοντας τις Συναρτήσεις
Class X: Athematic verbs II
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Εισαγωγή στον Προγ/μό Η/Υ
Τεχνολογία και Προγραμματισμός Υπολογιστών
Προτασιακή λογική.
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Το αντικείμενο Canvas Βίντεο
Προσθήκη εικόνας σε ιστολόγιο
Τα Βασικά δόγματα Γιώργος Λεπίδας Γ΄2.
Ερώτηση : Τι βαθμό πήρατε στα Καλλιτεχνικά;
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
JAVA – Basic OOP Principles
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Από τον Web 1.0 στον Web X
Γλώσσα Προγραμματισμού V PHP
Αναδρομικές Εξισώσεις και Αφηρημένοι Τύποι Δεδομένων
Javascript – Χειρισμός της σελίδας
Εκπαιδευτική ρομποτική
Σώζοντας το νερό για ένα καλύτερο μέλλον!
Συστήματα Αναμονής (Queuing Systems)
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
גרפיקה ממוחשבת: טרנספורמציות במישור
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Ελλειψοειδές των δεικτών στους διάξονες κρυστάλλους
Ομήρου Ιλιάδα Ζ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΑΠΟΣΤΑΞΗ Distillation.
Τύποι δεδομένων και τελεστές,
2013 edition Wilfred E. Major
Ομήρου Ιλιάδα Ζ
Class X: Athematic verbs II © Dr. Esa Autero
Μανίκη Γαβριέλλα Μήτσης Σταύρος
Μεταγράφημα παρουσίασης:

Μάθημα 6 Μετασχηματισμοί στο αντικείμενο Canvas

Μετασχηματισμοί / transforms Method Περιγραφή scale()Κλιμάκωση. Το τρέχον σχέδιο γίνεται μεγαλύτερο ή μικρότερο rotate()Περιστρέφει το τρέχον σχέδιο translate()Επαναθέτει το (0,0) σε μια θέση στον καμβά transform()Αντικαθιστά την τρέχουσα μήτρα μετασχηματισμού για το σχέδιο setTransform()Θέτει μήτρα μετασχηματισμού. See wiki:

Μετακίνηση / Translation translate(dx,dy)Επαναθέτει το (0,0) σε μια θέση στον καμβά μετακινούμενο κατά dx, dy Απλή μετακίνηση

Παράδειγμα Your browser is not HTML5 compatible. var c = document.getElementById("myCanvas"); var contx = c.getContext("2d"); contx.fillRect(10, 10, 100, 50); contx.translate(70, 70); contx.translate(10, 10); contx.fillRect(10, 10, 100, 50);

Περιστροφή / Rotation Theta: γωνία σε rad. Για τη μετατροπή των μοιρών (degrees) σε rad theta=μοίρες*Math.PI/180 Method Περιγραφή context.rotate(theta); Περιστροφή του context ως προς το κέντρο.

Παράδειγμα Your browser is not HTML5 compatible. var c = document.getElementById("myCanvas"); var contx = c.getContext("2d"); contx.rotate(90 * Math.PI / 180); contx.fillRect(30, 10, 60, 70);

Scale method Your browser is not HTML5 compatible. var c = document.getElementById("myCanvas"); var contx = c.getContext("2d"); contx.strokeRect(1, 1, 10, 10); contx.scale(6, 5); contx.strokeRect(1, 1, 10, 10);

Transform method a Κλιμάκωση του σχεδίου οριζοντίως (scale horizontal) b Στρέβλωση του σχεδίου οριζόντια (skew horizontal) c Στρέβλωση του σχεδίου κάθετα (skew vertical) d Κλιμάκωση του σχεδίου κάθετα (scale vertical) dx Μετακίνηση του σχεδίου οριζοντίως (translate horizontal) dy Μετακίνηση του σχεδίου κάθετα (translate vertical) Method Περιγραφή context.transform(a,b,c,d,dx,dy) Μετακίνηση, κλιμάκωση και στρέβλωση του context του canvas. Γενική μορφή μετασχηματισμού

Γνώση υπόβαθρου για το animation Προκειμένου να συνεχίσετε την ανάγνωση που αφορά το animation θα πρέπει πρώτα να μελετήσετε τα θέματα που αφορούν την δημιουργία κλάσεων και αντικειμένων στο javascript Σας συνιστώ να ξεκινήσετε από Ιδιαίτερα να μελετήσετε την έννοια του constρuctor και του τρόπου υλοποίησης.

Ο κύκλος του Animation 1. Εκκίνηση2. Ενημέρωση του καμβά 3. Καθαρισμός του καμβά 4. Σχεδιασμός του καμβά Ο κύκλος του animation

Animation class var Animation = function(canvasId){ this.canvas = document.getElementById(canvasId); this.context = this.canvas.getContext("2d"); this.t = 0; this.timeInterval = 0; this.startTime = 0; this.lastTime = 0; this.frame = 0; this.animating = false; // provided by Paul Irish window.requestAnimFrame = (function(callback){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback){ window.setTimeout(callback, 1000 / 60); }; })(); };

Animation.prototype.getContext = function(){ return this.context; }; Animation.prototype.getCanvas = function(){ return this.canvas;}; Animation.prototype.clear = function(){ this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);}; Animation.prototype.setStage = function(func){ this.stage = func;}; Animation.prototype.isAnimating = function(){ return this.animating;}; Animation.prototype.getFrame = function(){ return this.frame;}; Animation.prototype.start = function(){ this.animating = true; var date = new Date(); this.startTime = date.getTime(); this.lastTime = this.startTime; if (this.stage !== undefined) { this.stage(); } this.animationLoop(); };

Animation.prototype.stop = function(){ this.animating = false; }; Animation.prototype.getTimeInterval = function(){ return this.timeInterval; }; Animation.prototype.getTime = function(){ return this.t; }; Animation.prototype.getFps = function(){ return this.timeInterval > 0 ? 1000 / this.timeInterval : 0; }; Animation.prototype.animationLoop = function(){ var that = this; this.frame++; var date = new Date(); var thisTime = date.getTime(); this.timeInterval = thisTime - this.lastTime; this.t += this.timeInterval; this.lastTime = thisTime; if (this.stage !== undefined) { this.stage(); } if (this.animating) { requestAnimFrame(function(){ that.animationLoop(); }); }};

Ένα παράδειγμα window.onload = function(){ var anim = new Animation("myCanvas"); var canvas = anim.getCanvas(); var context = anim.getContext(); var linearSpeed = 100; // pixels / second var box = { x: 0, y: canvas.height / , width: 100, height: 50 };

anim.setStage(function(){ // update var linearDistEachFrame = linearSpeed * this.getTimeInterval() / 1000; if (box.x < canvas.width - box.width) { box.x += linearDistEachFrame; } else { this.stop(); } // clear this.clear(); // draw context.beginPath(); context.fillStyle = "blue"; context.fillRect(box.x, box.y, box.width, box.height); }); anim.start(); };

Δεύτερο παράδειγμα window.onload = function(){ var anim = new Animation("myCanvas"); var canvas = anim.getCanvas(); var context = anim.getContext(); var gravity = 2; // pixels / second^2 var box = { x: canvas.width / , y: 0, vx: 0, vy: 0, width: 100, height: 50 };

anim.setStage(function(){ // update if (this.getTime() > 1000) { var speedIncrementEachFrame = gravity * anim.getTimeInterval() / 1000; // pixels / second box.vy += speedIncrementEachFrame; box.y += box.vy * this.getTimeInterval(); if (box.y > canvas.height - box.height) { box.y = canvas.height - box.height; this.stop(); } // clear this.clear(); // draw context.beginPath(); context.fillStyle = "blue"; context.fillRect(box.x, box.y, box.width, box.height); }); anim.start(); };