Unity3D C# quick start guide

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Unity3D C# quick start guide"

Transcript

1 Unity3D C# quick start guide Contributors: - Charalampos Alisavakis sdi @di.uoa.gr (CA) Versions: - Version 1: Initial draft by CA.

2 2

3 Εισαγωγή Το παρόν αρχείο κατασκευάστηκε με σκοπό να αποτελεί έναν εύκολο και γρήγορο οδηγό στο κομμάτι του προγραμματισμού scripts για το Unity3D προσανατολισμένο σε αναγνώστες χωρίς ιδιαίτερη εμπειρία πάνω στο αντικείμενο. Παρακάτω θα υπάρχουν αναφορές σε τεχνικά ζητήματα τόσο της γλώσσας C# όσο και χαρακτηριστικών του Unity3D τα οποία, ωστόσο, δεν θα έπρεπε να αποτελούν το κύριο σημείο εστίασης. Αντιθέτως, ο λόγος που εμπεριέχονται στον οδηγό αυτό είναι ώστε να δικαιολογηθούν ορισμένες συμπεριφορές στα παραδείγματα και στον τρόπο συγγραφής του κώδικα. Τα παραδείγματα είναι αυτά τα οποία θα συμβάλλουν πολύ περισσότερο τόσο στη κατανόηση της λειτουργίας των scripts εντός του περιβάλλοντος του Unity3D όσο και ως αναφορές για τους πιο συχνούς μηχανισμούς που εμφανίζονται στα παιχνίδια. Επίσης, είναι σημαντικό να αναφερθεί πως σε καμία περίπτωση ο παρόν οδηγός δεν θα πρέπει να θεωρηθεί ως η μοναδική ή η καλύτερη λύση σε ό,τι αφορά το scripting στο Unity3D. Σκοπός είναι αυτό το αρχείο να βοηθήσει στο να ξεκινήσει κανείς να μαθαίνει το σκεπτικό γύρω από τον κώδικα στο συγκεκριμένο περιβάλλον. Από εκεί και πέρα τα υπόλοιπα μπορεί να τα μάθει από άλλες πηγές (Unity tutorials, videos, forums) και κυρίως με την εξάσκηση και την εμπειρία. Τέλος, να σημειωθεί πως προαπαιτούμενες γνώσεις ΔΕΝ χρειάζεται να υπάρχουν για να αξιοποιηθεί ο οδηγός. Θα ήταν πολύ χρήσιμο να υπήρχαν προηγούμενες γνώσεις προγραμματισμού (C/C++), κυρίως σε ό,τι αφορά τη σύνταξη, αλλά επειδή, όπως αναφέρθηκε, τα τεχνικά ζητήματα δεν είναι τα πιο σημαντικά, τα παραδείγματα θα είναι αρκετά για μια δυναμική αρχή στο χώρο του scripting για το Unity3D. 3

4 Περιεχόμενα Κεφάλαιο 1: C#6 1. Κλάσεις6 2. Προσβασιμότητα πεδίων7 3. Getters Setters9 4. Constructors10 5. Static πεδία11 6. Κληρονομικότητα13 7. Namespaces14 Επίλογος κεφαλαίου 115 Κεφάλαιο 2: API16 1. Αναγνώριση όρων16 2. Editor και autocomplete18 Κεφάλαιο 3: Βασικές έννοιες, κλάσεις, συναρτήσεις και συνθήκες20 1. Public & Private πεδία20 2. Prefabs22 3. Awake/Start/Update24 4. Vector Quaternion26 6. Transform27 7. GameObject30 8. Find & GetComponent30 9. Rigidbody Inputs Colliders & Triggers Coroutines Raycasting41 Κεφάλαιο 4: Παραδείγματα43 1. Απλό 2D character controller43 4

5 2. Συμπεριφορά για όπλο με χρήση Raycasting44 5

6 Κεφάλαιο 1: C# Η C# αποτελεί μια γλώσσα με αντικειμενοστραφή χαρακτηριστικά που δημιουργήθηκε και αναπτύχθηκε από τη Microsoft. Η σύνταξή της παραπέμπει σε μεγάλο βαθμό σε αυτή των γλωσσών C και C++ με ορισμένα επιπλέον στοιχεία τα οποία καθιστούν την ανάπτυξη εφαρμογών σημαντικά πιο εύκολη. Στα πλαίσια που μας αφορά, η C# έχει τα εξής χαρακτηριστικά τα οποία χρησιμοποιούνται πιο συχνά στη συγγραφή scripts για το Unity3D: 1. Κλάσεις Η C# είναι, μεταξύ άλλων, μια αντικειμενοστραφής γλώσσα, γεγονός που της επιτρέπει να διαχειρίζεται τύπους δεδομένων σε μορφή κλάσεων όπως προσδιορίζει το αντικειμενοστραφές μοντέλο. Εφόσον δεν είναι ήδη γνωστό, μια κλάση αποτελεί έναν τύπο δεδομένων ο οποίος περιλαμβάνει πεδία τα οποία μπορούν να έχουν τη μορφή είτε άλλων τύπων δεδομένων (int, float, αντικείμενα άλλων κλάσεων κλπ) είτε συναρτήσεων-μελών που αναφέρονται στα αντικείμενα που παράγει η κλάση. Είναι σημαντικό να γίνει ξεκάθαρο όσο το δυνατόν νωρίτερα πως η έννοια κλάση και αντικείμενο διαφέρουν με τον εξής τρόπο: η κλάση ορίζει τα πεδία που θα έχει το αντικείμενο, σχεδιάζοντας την «αρχιτεκτονική» του. Το αντικείμενο αποτελεί μια μεταβλητή ποσότητα που περιλαμβάνει ό,τι ορίζει η κλάση και καταλαμβάνει στη μνήμη τον χώρο που ορίζουν τα πεδία της. Για να εκφραστεί με μια αναλογία, η κλάση θα αποτελούσε τα σχέδια κατασκευής ενός σπιτιού, ενώ κάθε σπίτι που θα χτιζόταν βάσει των σχεδίων αυτών, θα αποτελούσε αντικείμενο της κλάσης. Ο ορισμός μιας κλάσης έχει την εξής μορφή: class MyClass /*Pedia*/ 6

7 Οπότε, αν η κλάση είχε τύπους δεδομένων και συναρτήσεις ως πεδία θα είχε την εξής μορφή: 1 class MyClass 2 3 int myint; 4 float myfloat = 0.2f; 5 string mystring; 6 7 void myfunction() Αναλύοντας το παραπάνω έχουμε: Στις γραμμές 3 5 δηλώνονται 3 διαφορετικά πεδία από 3 διαφορετικούς τύπους δεδομένων: ακέραιο αριθμό, πραγματικό αριθμό και συμβολοσειρά αντίστοιχα. Στο 1 ο και 3 ο πεδίο δεν έχει οριστεί αρχική τιμή, οπότε το κάθε ένα θα έχει την αντίστοιχη «μηδενική» τιμή του. Οπότε το myint θα είναι ίσο με 0 και το mystring θα είναι ίσο με την κενή συμβολοσειρά. Στο 2 ο πεδίο αναθέτουμε τιμή 0.2 στο myfloat. Για να προσδιοριστεί πως ο αριθμός ανήκει σε κάποιο πεδίο float, προσθέτουμε το γράμμα f μετά το νούμερο (0.2f). Στις γραμμές 7 9 δηλώνεται η συνάρτηση myfunction() η οποία δεν παίρνει κανένα όρισμα και δεν επιστρέφει κανένα αποτέλεσμα. Στην προκειμένη περίπτωση δεν εκτελεί καμία συγκεκριμένη λειτουργία. 2. Προσβασιμότητα πεδίων Οι κλάσεις μπορεί να έχουν πεδία τα οποία να είναι καλύτερο να διατηρούνται χωρίς να μπορούν να προσπελαστούν από πηγές εκτός της κλάσης. Εναλλακτικά, μπορεί κάποια πεδία να είναι καλύτερο να μεταβάλλονται εκτός της κλάσης γιατί μπορεί να εξαρτώνται από κάποια είσοδο του χρήστη, ή από κάποιον άλλο εξωτερικό παράγοντα. Για το λόγο αυτό χρησιμοποιούνται τα εξής keywords για να προσδιοριστούν κατά πόσο τα πεδία μπορούν να προσπελαστούν από πηγές εκτός της κλάσης: 7

8 public: Όπως ορίζει και το όνομα, το συγκεκριμένο keyword δηλώνει πως το πεδίο (τύπος δεδομένων ή συνάρτηση-μέλος) στο οποίο αναφέρεται είναι δημόσιο και έξω από τη κλάση. Επομένως, το συγκεκριμένο πεδίο ενός αντικειμένου της κλάσης μπορεί να προσπελαστεί και ενδεχομένως να μεταβληθεί από κάποια πηγή εκτός της κλάσης. Αξίζει να σημειωθεί πως στα πλαίσια του Unity3D ένα πεδίο που ορίζεται ως public μπορεί να μεταβληθεί όχι μόνο μέσω κώδικα αλλά και από τον ίδιο τον editor του Unity3D (βλ. παραδείγματα). private: Κατά αντιστοιχία, το keyword αυτό δηλώνει πως το πεδίο στο οποίο αναφέρεται είναι ιδιωτικό της κλάσης και δεν μπορεί να προσπελαστεί από κάποια εξωτερική πηγή. Για παράδειγμα έστω πως είχαμε την παραπάνω κλάση και είχαμε μεταβάλλει τα πεδία ως εξής: class MyClass public int myint; private float myfloat = 0.2f; public string mystring; public void myfunction() myfloat++; Έχουμε ορίσει τα myint, mystring και myfunction ως public πεδία ενώ το myfloat ως private. Η συνάρτηση myfunction δεν έχει πρόβλημα να διαχειριστεί το myfloat διότι, αν και είναι private, και τα δύο πεδία ανήκουν στην ίδια κλάση. Έστω τώρα πως είχαμε το εξής στο ίδιο αρχείο.cs: 1 class MyOtherClass 2 3 void myotherfunction() 4 5 MyClass myclassobject = new MyClass(); 6 myclassobject.myint++; 7 myclassobject.myfunction(); 8 9 8

9 Αυτή η καινούρια κλάση περιέχει μόνο μια συνάρτηση ονόματι myotherfunction(). Μέσα στη συνάρτηση αυτή δημιουργείται ένα αντικείμενο της κλάσης MyClass με όνομα myclassobject. Στη γραμμή 5 δημιουργείται το αντικείμενο και αρχικοποιείται με τον τρόπο που φαίνεται. Το new δηλώνει πως κατασκευάζουμε ένα νέο αντικείμενο. Το MyClass() αναφέρεται στη κλήση της συνάρτησης constructor της κλάσης MyClass (βλ. 4. Constructors). Ουσιαστικά η γραμμή αυτή δηλώνει τη χρήση ενός τέτοιου αντικειμένου και κάνει τις απαραίτητες δεσμεύσεις στη μνήμη για να κατασκευάσει το αντικείμενο. Το αντικείμενο myclassobject έχει όλα τα πεδία που περιγράφει η κλάση MyClass με τις προσβασιμότητες που προσδιορίστικαν. Επομένως, αφού το πεδίο myint είχε δηλωθεί ως public, η συνάρτηση της κλάσης MyOtherClass μπορεί να το προσπελάσει και να το μεταβάλλει 1. Η συνάρτηση myfunction() είναι επίσης public οπότε μπορεί να κληθεί μέσα από τη συνάρτηση της MyOtherClass οπότε μεταβάλλεται και η τιμή της myfloat έμμεσα από τη συνάρτηση. Ωστόσο, το πεδίο myfloat είναι private, οπότε στα πλαίσια της κλάσης MyOtherClass, το myclassobject.myfloat είναι αόρατο και μη προσβάσιμο. Μπορούν επιπλέον να υπάρχουν public και private κλάσεις το οποίο αφορά το κατά πόσο είναι ορατές ή όχι σε άλλες κλάσεις. 3. Getters Setters Οι getters/setters (ή accessors/mutators) αποτελούν συναρτήσεις της κλάσης που αφορούν ξεχωριστά τα πεδία της και ορίζουν το κατά πόσο μπορούν να μεταβληθούν ή όχι. Η C# έχει έναν ξεχωριστό τρόπο με τον οποίο το ορίζει αυτό και παρουσιάζεται στο παρακάτω παράδειγμα: public class MyClass public float myfloat get; set; public float myotherfloat get; public void myfunction() myfloat = myotherfloat / 2; 1 Να σημειωθεί πως η μεταβολή του myint εφαρμόζεται μόνο στο αντικείμενο myclassobject. Αν κατασκευαστεί ένα αντικείμενο myclassobject2 από την κλάση MyClass το πεδίο myint του θα είναι όπως ορίζει η κλάση, δηλαδή 0. 9

10 Το πεδίο myfloat έχει και get και set ιδιότητες που του επιτρέπουν να διαβαστεί και να μεταβληθεί. Το πεδίο myotherfloat έχει μόνο την ιδιότητα get, γεγονός που σημαίνει πως το συγκεκριμένο πεδίο, αν και public, μπορεί να διαβαστεί αλλά όχι να μεταβληθεί, ούτε καν από κάποια συνάρτηση εντός της κλάσης. Η συνάρτηση myfunction() δείχνει πως ενώ το myfloat μπορεί να μεταβληθεί, το πεδίο myotherfloat χρησιμοποιείται μόνο για να διαβάσουμε τη τιμή του. Αυτές οι μεταβλητές λέγονται και read-only. 4. Constructors Ο constructor αποτελεί συνάρτηση μιας κλάσης η οποία καλείται καθώς δημιουργείται ένα αντικείμενο αυτής της κλάσης. Χρησιμοποιείται για την αρχικοποίηση των τιμών των πεδίων του αντικειμένου καθώς και για τη δέσμευση του απαραίτητου χώρου στη μνήμη. Ο ορισμός μιας συνάρτησης constructor γίνεται με τον εξής τρόπο: public class MyClass private int myint; public float myfloat; public MyClass(int myint, float myfloat) this.myint = myint; this.myfloat = myfloat; public MyClass(int myint) this.myint = myint; myfloat = 5.2f; public MyClass(float myfloat) this.myfloat = myfloat; myint = 3; Ο constructor είναι public συνάρτηση που δεν έχει τύπο επιστροφής και το όνομά της είναι ακριβώς αυτό της κλάσης. Όπως και με τις συναρτήσεις, και στους constructor μπορούν να κατασκευάζονται πολλές συναρτήσεις με το ίδιο όνομα εφόσον τα ορίσματά τους είναι διαφορετικά σε αριθμό ή/και τύπους. 10

11 O 1 ος constructor παίρνει ως ορίσματα ένα int και ένα float τα οποία αναθέτει στις τιμές των πεδίων του αντικειμένου. Ο 2 ος constructor παίρνει ως όρισμα μόνο ένα int το οποίο αναθέτει στο πεδίο myint και αναθέτει σταθερή τιμή στο πεδίο myfloat ενώ ο 3 ος constructor κάνει το αντίστροφο. Το this πρόκειται για ένα keyword το οποίο αναφέρεται στο αντικείμενο το οποίο καλεί τη συγκεκριμένη συνάρτηση. Ο λόγος που τοποθετείται στους constructor είναι για λόγους σαφήνειας, καθώς τα ονόματα των ορισμάτων είναι ίδια με αυτά των πεδίων της κλάσης. Η χρήση των constructor αυτών γίνεται με τον εξής τρόπο: class MyOtherClass void myotherfunction() MyClass myclassobject1 = new MyClass(1,1.2f); MyClass myclassobject2 = new MyClass(2); MyClass myclassobject3 = new MyClass(0.4f); Το myclassobject1 χρησιμοποιεί τον 1 ο constructor, ενώ τα myclassobject2 και myclassobject3 χρησιμοποιούν τον 2 ο και 3 ο constructor αντίστοιχα για να αρχικοποιηθούν. Το αν τα πεδία είναι public ή private δεν έχει σημασία καθώς ο constructor που τους αναθέτει τιμές ανήκει στην κλάση. Επομένως, τα πεδία των αντικειμένων θα έχουν την εξής μορφή: myclassobject1 myclassobject2 myclassobject3 myint myfloat Static πεδία Εντός των κλάσεων μπορεί να υπάρχουν πεδία τα οποία θα ήταν χρήσιμο να σχετίζονται με την κλάση αλλά να μην εξαρτώνται από ένα και μόνο αντικείμενο. Για παράδειγμα, έστω πως υπάρχει η κλάση Car με ένα πεδίο int counter το οποίο αυξάνεται με κάθε constructor για να μετράει πόσα αμάξια υπάρχουν. Αυτό θα είχε μια τέτοια μορφή: 11

12 class Car public int counter = 0; public Car() counter++; Ωστόσο κάτι τέτοιο δεν θα δουλέψει με τον τρόπο αυτό, διότι το πεδίο counter θα απευθύνεται σε ένα μόνο αντικείμενο και για κάθε αμάξι που φτιάχνεται το counter θα ξεκινάει από 0 και θα πηγαίνει στο 1 λόγω του constructor. Εδώ εισέρχεται η έννοια του static πεδίου. Αν αντί για public int counter = 0; η κλάση είχε public static int counter = 0;, το πεδίο counter δεν θα απευθυνόταν σε κάθε αντικείμενο ξεχωριστά αλλά σε μια σταθερή μεταβλητή counter που συνδέεται μονάχα με την κλάση. Οπότε θα μπορούσε να υπάρξει το εξής: class Car public static int counter = 0; public Car() counter++; class MyOtherClass void myotherfunction() Car car1 = new Car(); Car.counter++; Στην κλάση MyOtherClass κατασκευάζεται ένα αντικείμενο της κλάσης Car με όνομα car1 το οποίο καλεί τον constructor του ο οποίος αυξάνει κατά 1 τον μετρητή που αντιστοιχεί στην κλάση Car. Με την εντολή car.counter++; αυξάνεται ξανά ο μετρητής counter της κλάσης Car, χωρίς κάποια χρηστικότητα παρά μόνο για τους σκοπούς του 12

13 παραδείγματος. Για να γίνει αυτό έπρεπε πρώτα να προσπελαστεί μέσω της κλάσης Car και ΟΧΙ μέσω του αντικειμένου car1. Μάλιστα το car1.counter δεν υφίσταται καν σαν πεδίο. 6. Κληρονομικότητα Το κεφάλαιο της κληρονομικότητας στον αντικειμενοστραφή προγραμματισμό έχει γενικά πολύ υλικό, οπότε εδώ θα αναγραφούν τα πιο βασικά. Η κληρονομικότητα αφορά μια τεχνική οργάνωσης κλάσεων με βάση τα κοινά τους χαρακτηριστικά σε μια διάταξη από πιο γενικές σε πιο ειδικές κλάσεις. Για παράδειγμα, έστω η κλάση Computer με χαρακτηριστικά RAM και CPU. Ωστόσο, πλέον και ένα smartphone μπορεί να έχει RAM και ένα μοντέλο CPU, ενώ έχει π.χ. και αριθμό τηλεφώνου και αυτονομία μπαταρίας σε ώρες. Αντί να κατασκευάσουμε 2 εντελώς διαφορετικές κλάσεις Computer και Smartphone που έχουν και οι 2 πεδία RAM και CPU μπορούμε να θεωρήσουμε πως το Smartphone κληρονομεί τα χαρακτηριστικά αυτά από τη κλάση Computer. Σε C# αυτό περιγράφεται έτσι: class Computer public int RAM; public string CPU; public Computer(int ram, string cpu) RAM = ram; CPU = cpu; class Smartphone : Computer public string number; public float battery_life; public Smartphone(int ram, string cpu, string number, float battery_life) : base(ram,cpu) this.number = number; this.battery_life = battery_life; Το ότι μια κλάση κληρονομεί από μια άλλη εκφράζεται στο όνομα της κλάσης χρησιμοποιώντας : και το όνομα της γενικότερης κλάσης από την οποία κληρονομεί. Η κλάση Smartphone έχει επίσης τα πεδία RAM και CPU ως public μεταβλητές από τη κλάση Computer. 13

14 Ο constructor της κλάσης Smartphone περιλαμβάνει ως ορίσματα πεδία τόσο για την ίδια τη κλάση όσο και για το constructor της κλάσης Computer. Τα πεδία που αφορούν τον constructor της κλάσης Computer περνάνε ως ορίσματα στην κλήση του base constructor, δηλαδή του constructor της κλάσης από την οποία κληρονομεί η κλάση Smartphone. Ο base constructor καλείται όπως φαίνεται στον κώδικα με : base() έπειτα από τα ορίσματα του constructor της κλάσης-παιδί, όπου ως ορίσματα στην base περνάνε τα απαραίτητα όπως ορίστηκαν από τον constructor της κλάσηςγονιού. 7. Namespaces Για καλύτερη οργάνωση του κώδικα αλλά και για καλύτερη απόκρυψη δεδομένων όπου χρειάζεται, ορίζονται namespaces, δηλαδή, κομμάτια κώδικα που μπορεί να περιέχουν μία ή και πολλές κλάσεις μαζί. Ο τρόπος που ορίζονται τα namespaces είναι ο εξής: namespace mynamespace class MyClass public void myfunction() Τα κομμάτια κώδικα στα namespaces μπορούν να προσπελαστούν με δύο τρόπους: είτε εισάγοντας στο script ολόκληρο το namespace στην αρχή του script με χρήση της εντολής using, είτε αξιοποιώντας το συγκεκριμένο κομμάτι εντός του κώδικα σε ένα σημείο. Χρησιμοποιώντας το από πάνω namespaces οι 2 μέθοδοι φαίνονται παρακάτω: 1. using mynamespace; class MyOtherClass void myotherfunction() MyClass myclassobject = new MyClass(); myclassobject.myfunction(); 14

15 2. class MyOtherClass void myotherfunction() mynamespace.myclass myclassobject = new mynamespace.myclass(); myclassobject.myfunction(); Επίλογος κεφαλαίου 1 Το πρώτο κεφάλαιο είχε ως σκοπό να παρέχει σε εισαγωγικό επίπεδο ορισμένες τεχνικές λεπτομέρειες και όρους πάνω στη γλώσσα που θα χρησιμοποιηθεί για τη συγγραφή των scripts στο Unity3D. Δεν είναι απαραίτητη η γνώση αυτών των τεχνικών λεπτομερειών και, μάλιστα, πολλά από τα παραπάνω δεν θα χρειαστούν για τη συγγραφή των scripts μέχρι κάποιο πιο ψηλό επίπεδο. Ωστόσο, κρίθηκε χρήσιμο να αναφερθούν κυρίως για τη διασταύρωση των εννοιών με τα παραδείγματα με σκοπό τη καλύτερη κατανόησή τους. Άλλωστε, μπορεί κάποιος απλά να δει και από τα περιεχόμενα πως εδώ υπάρχουν λίγα λόγια για τους όρους αυτούς ώστε να ανατρέξει στον παρόν οδηγό ή στο διαδίκτυο για πιο πολλές πληροφορίες. 15

16 Κεφάλαιο 2: API Το API (Application Program Interface) αποτελεί το σύνολο από συναρτήσεις, κλάσεις, interfaces κλπ τα οποία χρησιμοποιούνται για την ανάπτυξη εφαρμογών σε συγκεκριμένα περιβάλλοντα. Εφόσον δεν αναφερόμαστε σε εφαρμογές κονσόλας, για να γραφτούν προγράμματα σε περιβάλλοντα όπως συγκεκριμένα λειτουργικά συστήματα ή, όπως στην περίπτωσή μας, εντός άλλων προγραμμάτων χρησιμοποιούνται οι αντίστοιχες βιβλιοθήκες με τα απαραίτητα εργαλεία. Για το λόγο αυτό κιόλας δεν είναι απαραίτητες οι εις βάθος γνώσεις της C# για να γραφτούν scripts εντός του Unity3D, καθώς θα γίνεται κυρίως χρήση του API που παρέχει το ίδιο το πρόγραμμα. Σημειώνεται, επιπλέον, πως σε καμία περίπτωση δεν απαιτείται εκτενής γνώση ολόκληρου του API του Unity3D (όπως και για οποιοδήποτε περιβάλλον αξιοποιείται το API). Τα πιο βασικά στοιχεία θα εφαρμοστούν στα παραδείγματα και για οτιδήποτε άλλο υπάρχει online documentation πάνω στις έτοιμες βιβλιοθήκες του Unity3D ( Στο σύντομο αυτό κεφάλαιο οι βασικοί στόχοι είναι να γίνει κατανοητή η χρήση του API μέσω του editor (MonoDevelop/ Visual Studio) για γρήγορη και εύκολη συγγραφή των scripts καθώς και να εξοικειωθεί ο αναγνώστης με την αναγνώριση των όρων εντός του Unity3D ώστε να διευκολυνθεί στη χρήση τόσο του API όσο και του online documentation. 1. Αναγνώριση όρων Το API του Unity3D χρησιμοποιεί συγκεκριμένους όρους για να αναπαραστήσει διάφορες έννοιες τους οποίους και είναι βασικό να γνωρίζει κανείς ώστε να χρησιμοποιήσει αποτελεσματικά το API. Για παράδειγμα, μπορεί να θέλει κάποιος να ψάξει μια συνάρτηση που θα μετακινεί ένα αντικείμενο προς μία κατεύθυνση, ωστόσο ο όρος move, όπως ίσως σκεφτόταν κάποιος, δεν υφίσταται στο API του Unity3D. Για τον σκοπό αυτό χρησιμοποιείται η συνάρτηση Translate της κλάσης Transform. Για να υπάρχει μια αρκετά καθαρή εικόνα ως προς το τι όροι υπάρχουν στο API, αρκεί να παρατηρηθεί το ίδιο το editor του Unity3D. Ακολουθεί ένα screenshot από το inspector tab του Unity3D όταν είναι επιλεγμένο ένα directional light: 16

17 Στο παρόν παράδειγμα σημειώνονται 3 βασικά μέρη (components) του αντικειμένου: Το 1 ο δεν φαίνεται άμεσα αλλά είναι το ανοιχτό γκρι στη κορυφή που έχει το όνομα του αντικειμένου, το tag, το layer και το αν είναι static ή όχι. Αυτό είναι μια από τις γενικότερες κατηγορίες component και ονομάζεται Game Object. Το 2 ο είναι το Transform και αποτελεί το component που χαρακτηρίζει πως το αντικείμενο βρίσκεται στον χώρο. Τα πεδία του προσδιορίζουν τη θέση, τη κλίση και τη κλίμακα του αντικειμένου. Το 3 ο είναι το Light και, όπως προδίδει το όνομα, αφορά την ιδιότητα του αντικειμένου να εκπέμπει φως. Τα πεδία στο συγκεκριμένο component αφορούν τις ρυθμίσεις του. Οι λέξεις που είναι σημειωμένες με κίτρινο είναι εκείνες που αν προσπελάσει κανείς την αντίστοιχη κλάση του component θα τις βρει και στο API. Επομένως θα μπορούσε κανείς να γράψει το ακόλουθο: Γενικός κανόνας: Αν υπάρχει κάπου σαν λέξη μέσα στο editor του Unity3D, υπάρχει μεγάλη πιθανότητα να υπάρχει και στην αντίστοιχη κλάση του API. 17

18 2. Editor και autocomplete Όπως και στις δικές μας κλάσεις, για να προσπελαστούν τα πεδία του αντικειμένου χρησιμοποιείται η τελεία («.»). Είτε στο MonoDevelop, είτε στο Visual Studio, όταν χρησιμοποιείται η τελεία εμφανίζεται ένα μενού με όλες τις δυνατές επιλογές πάνω στο αντικείμενο που μόλις γράφτηκε. Όσο γράφονται και άλλα γράμματα ή λέξεις που αντιστοιχούν σε κάποιες από τις επιλογές, όλες οι άλλες επιλογές αφαιρούνται από το μενού και είναι εφικτό να επιλεχθεί κάποια από αυτές τις επιλογές με βελάκια ή με το ποντίκι ή με άλλα μέσα, ανάλογα με τον κειμενογράφο. Ακολουθούν παραδείγματα της συγκεκριμένης λειτουργίας: Στο συγκεκριμένο παράδειγμα αξίζουν να σημειωθούν τα εξής: Οι επιλογές που εμφανίζονται ξεπερνούν κατά πολύ όσα δείχνει το editor. Αυτό συμβαίνει λόγω όλων των κλάσεων από τις οποίες κληρονομεί η κλάση Light, από άλλες επιλογές της ίδιας της C# ή και επειδή υπάρχουν πεδία τα οποία είναι προσπελάσιμα μόνο μέσω κώδικα. Για την κάθε επιλογή εμφανίζεται η σύνταξή της, τι επιστρέφει και τι ορίσματα δέχεται καθώς και, σε πολλές περιπτώσεις, μια μικρή περιγραφή για το τη λειτουργία της. 18

19 Στο παράδειγμα αυτό οι επιλογές του μενού είναι πολύ λιγότερες γιατί έχουν μείνει μόνο αυτές που εμπεριέχουν σε κάποιο σημείο τα γράμματα in. Αξίζει επίσης να παρατηρηθεί πως δίπλα από κάθε πεδίο υπάρχει ένα γράμμα. Το γράμμα αυτό περιγράφει περί τίνος πρόκειται το πεδίο. Με P συμβολίζεται ένας τύπος δεδομένων όπως float ενώ με M μια συνάρτηση (από το method, που επίσης χαρακτηρίζει μια συνάρτηση). 19

20 Κεφάλαιο 3: Βασικές έννοιες, κλάσεις, συναρτήσεις και συνθήκες Στο κεφάλαιο αυτό θα γίνει μια σύντομη παρουσίαση των βασικών εργαλείων που θα χρησιμοποιηθούν στα παραδείγματα του κεφαλαίου 4. Ο λόγος που οι έννοιες αυτές παρουσιάζονται σε ξεχωριστό κεφάλαιο και όχι στην επεξήγηση του κάθε παραδείγματος είναι καθαρά για αποφυγή επανάληψης πληροφοριών και για να υπάρχει ένας πιο γρήγορος τρόπος να ανατρέξει κανείς σε αυτές. Άλλωστε, είναι καλύτερο να παρουσιαστούν τα εργαλεία που αποτελούν τα παραδείγματα από πιο πριν ώστε να είναι πιο εύκολη και γρήγορη η κατανόησή τους. 1. Public & Private πεδία Στο 1 ο κεφάλαιο αναφέρθηκαν οι ιδιότητες public και private των πεδίων ως προς τη προσβασιμότητα. Εντός του API του Unity3D, οι ιδιότητες αυτές αποκτούν διαφορετική σημασία, καθώς το αν ένα πεδίο είναι public ή όχι ορίζει αν θα είναι προσβάσιμο και μέσω του editor. Έστω, λοιπόν, πως υπάρχει το εξής script στο project το οποίο ενσωματώνεται σε ένα άδειο Game Object: Επιλέγοντας αυτό το Game Object θα βλέπαμε αυτό στον inspector: 20

21 Παρατηρείται πως μαζί με τα άλλα components του αντικειμένου εμφανίστηκε ένα component με το όνομα του script το οποίο ενσωματώθηκε στο αντικείμενο. Κάθε script που ενσωματώνεται σε αντικείμενο είναι ένα component του οποίου ο τύπος έχει το όνομα του ίδιου του script. Εφόσον το πεδίο mylight δηλωθεί σαν public, όμως, θα γίνουν οι εξής αλλαγές: Παρατηρείται πως στο component του script εμφανίστηκε ένα πεδίο με το όνομα My Light το οποίο δέχεται κάποιο αντικείμενο το οποίο έχει Light σαν component. Δηλαδή θα μπορούσε στο πεδίο αυτό να γίνει drag and drop το directional light της σκηνής, για παράδειγμα, αλλά δεν θα μπορούσε να γίνει drag and drop το Main Camera ή κάποιο αντικείμενο που δεν έχει Light ως component. Είναι προφανές πως η παρούσα λειτουργία των private/public πεδίων λειτουργούν για οποιοδήποτε τύπο δεδομένων. 21

22 2. Prefabs Ένα prefab είναι ένα σύνολο από αντικείμενα, components κλπ τα οποία αποθηκεύονται σε ένα Game Object το οποίο αποθηκεύεται στον φάκελο των assets. Χρησιμοποιείται πολύ συχνά σε projects του Unity3D διότι βοηθάει στην οργάνωση αντικειμένων που περιέχουν scripts και components με συγκεκριμένες ρυθμίσεις ώστε να μη χρειάζεται οι ρυθμίσεις αυτές να επαναπροσδιορίζονται συνεχώς. Κατασκευή ενός prefab: Έστω πως υπάρχει στη σκηνή ένα αντικείμενο με ένα Light Component του οποίου τις ρυθμίσεις έχουμε αλλάξει, όπως αυτό: 22

23 Για να αποθηκευτεί αυτό το αντικείμενο με αυτό το όνομα, τα components, τις ρυθμίσεις κλπ ως ένα prefab απλά γίνεται drag and drop από το hierarchy window στο project window και δημιουργείται το εξής asset: Πλέον, για να τοποθετηθεί ένα ακόμα αντικείμενο με τις ίδιες ακριβώς ρυθμίσεις αρκεί να γίνει drag and drop του prefab στη σκηνή. Αλλαγές του prefab: Αλλαγές στις ρυθμίσεις των components ενός prefab μπορούν να γίνουν με 2 τρόπους. Μέσα από κάποιο αντικείμενο της σκηνής που προήλθε από αυτό το prefab ή μέσα από το ίδιο το prefab. Να σημειωθεί πως μια από τις πιο χρήσιμες ιδιότητες των prefabs είναι πως όταν οι εφαρμογές εφαρμοστούν στο prefab, οι ρυθμίσεις θα αλλάξουν σε ΚΑΘΕ αντικείμενο που προήλθε από αυτό το prefab. Για τον πρώτο τρόπο, αρκεί να γίνουν οι αλλαγές στις ρυθμίσεις του αντικειμένου και έπειτα να γίνει κλικ στο Apply που θα έχει εμφανιστεί στην κορυφή του inspector εφόσον το αντικείμενο προήλθε από κάποιο prefab: 23

24 Αν ο χρήστης δεν πατήσει Apply, οι αλλαγές αυτές που έγιναν θα ισχύουν μόνο στο παρόν αντικείμενο και δεν θα περαστούν σε άλλα αντικείμενα που προήλθαν από το ίδιο prefab. Για τον δεύτερο τρόπο αρκεί ο να επιλεχθεί το prefab μέσα από το project window και να γίνουν οι αλλαγές που ο χρήστης επιθυμεί. 3. Awake/Start/Update Οι συναρτήσεις Awake/Start/Update αποτελούν συναρτήσεις του API οι οποίες καθορίζουν τι θα εκτελείται κατά τη διάρκεια του παιχνιδιού και αποτελούν τα βασικά δομικά χαρακτηριστικά κάθε συμπεριφοράς. Πιο συγκεκριμένα: void Awake() : Οτιδήποτε βρίσκεται εντός των αγκυλών θα εκτελείται κατά την εκκίνηση του παιχνιδιού. Χρησιμοποιείται κυρίως για αρχικοποίηση πεδίων, όπως components, τα οποία θέλουμε να έχουν αρχικοποιηθεί πριν από οποιοδήποτε άλλο συμβάν ώστε να μην υπάρξουν προβλήματα με πεδία που δεν έχουν προλάβει να αρχικοποιηθούν. void Start() : Οτιδήποτε βρίσκεται εντός των αγκυλών θα εκτελείται μετά την εκκίνηση του παιχνιδιού και τη στιγμή που το script είναι ενεργό όσο τρέχει το παιχνίδι. Σημειώνεται πως αν το script δεν είναι ενεργό κατά την εκκίνηση του παιχνιδιού, τα στοιχεία της Awake θα εκτελεστούν κανονικά, ενώ τα στοιχεία της Start θα εκτελεστούν όταν το script γίνει ενεργό. void Update() : Οτιδήποτε εντός των αγκυλών της συνάρτησης αυτής θα εκτελείται σε ΚΑΘΕ frame, και για τον λόγο αυτό αποφεύγεται να χρησιμοποιούνται χρονοβόρες διαδικασίες εντός της συνάρτησης. Έχει πάρα πολλές χρήσεις με τις πιο κοινές να είναι ο έλεγχος συνθηκών και εισόδου από τον χρήστη. Η Update συναντάται επίσης σε άλλες δύο μορφές με την 24

25 ίδια σύνταξη, ως FixedUpdate και ως LateUpdate. H FixedUpdate καλείται σε σταθερά χρονικά διαστήματα ανάμεσα σε frames και χρησιμοποιείται κυρίως για διαδικασίες που αφορούν physics, όπως συναρτήσεις της κλάσης Rigidbody. Η LateUpdate καλείται επίσης σε κάθε frame αλλά αφού κληθούν οι συναρτήσεις της Update. Κυρίως χρησιμοποιείται για οργάνωση της σειράς εκτέλεσης των συναρτήσεων. Για παράδειγμα αν μια κάμερα ακολουθεί έναν παίκτη, η κίνησή της θα πρέπει να εκτελείται στη LateUpdate καθώς ο παίκτης ενδεχομένως να έχει κινηθεί κατά τη διάρκεια της Update. Σημειώνεται πως κατά τη δημιουργία ενός καινούριου script μέσα από τον editor του Unity3D, το script θα έχει ήδη έτοιμες για συμπλήρωση τις συναρτήσεις Start και Update με την εξής μορφή: 4. Vector3 Το Vector3 αποτελεί κλάση του API η οποία αναπαριστά τρισδιάστατα διανύσματα. Χρησιμοποιούνται για να προσδιοριστεί η θέση ενός αντικειμένου ή η κατεύθυνσή του στο χώρο. Αρχικοποίηση ενός Vector3: Η αρχικοποίηση ενός αντικειμένου της κλάσης Vector3 γίνεται με τον εξής τρόπο: 25

26 Όπου τα float1, float2 και float3 είναι πραγματικοί αριθμοί οι οποίοι χρησιμοποιούνται για να δώσουν τιμές στα πεδία x, y και z, αντίστοιχα, του αντικειμένου vector. Τα πεδία x, y και z αναπαριστούν την απόσταση στον κάθε έναν από τους τρεις άξονες. Σημειώνεται πως στον constructor του Vector3 υπάρχει overload που επιτρέπει να μην εισαχθεί τιμή στο πεδίο του z, στην οποία περίπτωση το πεδίο αυτό θα ήταν ίσο με το 0. Κατεύθυνση: Η κλάση Vector3 περιέχει ορισμένα static πεδία τα οποία παρέχουν κατευθύνσεις στον χώρο. Τα πεδία αυτά εκφράζονται ως εξής: o Vector3.up o Vector3.down o Vector3.right o Vector3.left o Vector3.forward o Vector3.back Κάθε ένα από τα πεδία αυτά αντιστοιχεί σε ένα τρισδιάστατο διάνυσμα το οποίο αποτελεί βάση του τρισδιάστατου χώρου και έχει μορφή τριών αριθμών εκ των οποίων οι δύο είναι 0 και ένας είναι 1 ή -1 ανάλογα με την κατεύθυνση. Για παράδειγμα το Vector3.right αντιστοιχεί στο διάνυσμα (1,0,0), το Vector3.left στο (-1,0,0) κ.ο.κ.. Η ανάθεση μιας τέτοιας τιμής σε ένα αντικείμενο της κλάσης Vector3 γίνεται ως εξής: 5. Quaternion Το Quaternion είναι η κλάση η οποία χρησιμοποιείται για να αναπαραστήσει τη κλίση ενός αντικειμένου και αντιστοιχεί στο τετραδόνιο, μια έννοια στο χώρο των μαθηματικών στην οποία δεν υπάρχει νόημα να εμβαθύνουμε. Έχει αντίστοιχα 26

27 πεδία x, y, z και w (όπως το Vector3 έχει τα x, y, z) τα οποία όμως έχουν νόημα να μεταβληθούν απευθείας μόνο από άτομα που γνωρίζουν τη μαθηματική έννοια στην οποία αντιστοιχούν. Εναλλακτικά, εντός του κώδικα θα χρησιμοποιείται η αναπαράσταση του Quaternion σε γωνίες Euler, όπως άλλωστε εμφανίζεται και στον editor του Unity3D στα πεδία που αφορούν rotation. Αρχικοποίηση ενός Quaternion: Όπου τα float1, float2, float3 αντιστοιχούν στις γωνίες περιστροφής στον x, y και z άξονα αντίστοιχα. 6. Transform Το Transform αποτελεί μια από τις πιο κοινές κλάσεις καθώς σχεδόν κάθε αντικείμενο περιέχει το component Transform. Το component αυτό καθορίζει τις ιδιότητες ενός αντικειμένου το οποίο βρίσκεται στον χώρο. Δηλαδή, μέσω αυτού του component προσδιορίζονται ιδιότητες όπως η τοποθεσία, η κλίση ή η κλίμακα ενός αντικειμένου, σε παγκόσμιες ή τοπικές συντεταγμένες, και παρέχονται λειτουργίες για τη μετακίνησή του. Σχεδόν κάθε αντικείμενο για το οποίο γράφουμε κάποιο script έχει ένα αντικείμενο transform της κλάσης Transform το οποίο απευθύνεται στον εαυτό του. Τα πεδία που αφορούν στην τοποθεσία, κλίση και κλίμακα του αντικειμένου στο οποίο είναι ενσωματωμένο το script είναι τα εξής: 27

28 transform.position transform.rotation transform.lossyscale Τα πεδία αυτά αναφέρονται στη τοποθεσία, τη κλίση και τη κλίμακα ως προς τον υπόλοιπο κόσμο. Σε περίπτωση όμως που ένα αντικείμενο είναι παιδί ενός άλλου και θέλουμε να αναφερθούμε στα χαρακτηριστικά αυτά σε σχέση με το αντικείμενο-γονιό χρησιμοποιούνται τα εξής αντίστοιχα πεδία: transform.localposition transform.localrotation transform.localscale Σημειώνεται πως τα πεδία transform.position, transform.lossyscale, transform.localposition και transform.localscale είναι τύπου Vector3 ενώ τα πεδία transform.rotation και transform.localrotation είναι τύπου Quaternion και για να τα προσπελάσουμε ως Vector3 χρησιμοποιούμε τα πεδία transform.rotation.eulerangles και transform.localrotation.eulerangles. Ακολουθεί παράδειγμα αξιοποίησης των πεδίων αυτών: Υπάρχουν αρκετοί τρόποι να μεταβληθούν τα πεδία αυτά όπως φαίνεται στο παράδειγμα, και οι διαφορετικοί αυτοί τρόποι μπορούν να εφαρμοστούν και στα άλλα πεδία. Για παράδειγμα, θα μπορούσαμε κάλλιστα να χρησιμοποιήσουμε το εξής: 28

29 (Εννοείται πως τα παραδείγματα δεν έχουν κάποια συγκεκριμένη λειτουργικότητα.) Οι ίδιες ακριβώς λειτουργίες μπορούν να πραγματοποιηθούν με τους ίδιους τρόπους και στα αντίστοιχα local πεδία. Επίσης, η κλάση Transform περιέχει πεδία που μας επιτρέπουν να προσδιορίσουμε Vector3 αντικείμενα ως προς το συγκεκριμένο transform. Τα πεδία αυτά είναι τα: transform.forward transform.right transform.up Δεν υπάρχει λόγος να υπάρχουν τα αντίστοιχα back, left και down καθώς αντιστοιχούν απλά στις αρνητικές τιμές των παραπάνω. Η χρήση τους γίνεται με τον ίδιο ακριβώς τρόπο όπως τα πεδία της κλάσης Vector3 που ορίζουν κατευθύνσεις, και για το λόγο αυτό δεν κρίνεται σκόπιμο να παρατεθούν παραδείγματα. Επιπλέον, εντός της κλάσης Transform περιλαμβάνονται και οι εξής χρήσιμες συναρτήσεις: transform.translate(vector3 Translation); transform.rotate(vector3 EulerAngles); Η συνάρτηση transform.translate ουσιαστικά μεταφέρει ένα Transform προς την κατεύθυνση του Vector3. Η μεταφορά αυτή γίνεται στιγμιαία και λειτουργεί με ένα σκεπτικό τηλεμεταφοράς. Ωστόσο, σε πολλές περιπτώσεις η συνάρτηση αυτή χρησιμοποιείται για να προσομοιώσει κίνηση με το να μετακινείται το αντικείμενο κατά μικρά διαστήματα συνεχόμενα (π.χ. στη συνάρτηση Update). Ένα παράδειγμα της συγκεκριμένης συνάρτησης εν δράσει είναι το εξής: Το συγκεκριμένο κομμάτι κώδικα μεταφέρει το αντικείμενο στο οποίο είναι προσαρτημένο το script προς την ευθεία για αυτό κατεύθυνση συνεχόμενα. Ο αριθμός 5 προσδιορίζει τη ταχύτητα με την οποία το αντικείμενο μετακινείται. Όσο πιο μεγάλος ο αριθμός στη θέση του 5 τόσο μεγαλύτερη η ταχύτητα. 29

30 Τέλος, αξίζει να παρατηρηθεί το πεδίο Time.deltaTime. Το συγκεκριμένο κομμάτι παρέχει το χρόνο ανάμεσα στα frames του παιχνιδιού και είναι ΑΠΑΡΑΙΤΗΤΟ για να λειτουργούν τέτοιες συναρτήσεις ομαλά σε διαφορετικά συστήματα όπου τα fps είναι διαφορετικά. Η συνάρτηση transform.rotate λειτουργεί και συντάσσεται με παρόμοιο τρόπο όπως η transform.translate, μόνο που η λειτουργία της είναι να περιστρέφει το αντικείμενο γύρω από τον άξονα EulerAngles που προσδιορίζεται αντίστοιχα με κάποια κατεύθυνση πολλαπλασιασμένη με έναν αριθμό που δηλώνει τη ταχύτητα περιστροφής και με το Time.deltaTime για τους παραπάνω λόγους. 7. GameObject Όπως αναφέρθηκε, το GameObject είναι η γενικότερη κατηγορία που χαρακτηρίζει σχεδόν κάθε αντικείμενο που μπορεί να υπάρξει σε μια σκηνή, από τον παίκτη μέχρι ένα κουμπί του User Interface. Επειδή ακριβώς η κλάση αυτή είναι τόσο γενική δεν έχει πολλά πεδία ή συναρτήσεις που μας αφορούν. Ωστόσο, κρίνεται σκόπιμο να αναφερθεί η εξής συνάρτηση: gameobject.setactive(bool value); Σημειώνεται πως η παρούσα συνάρτηση εφαρμόζεται σε αντικείμενο της κλάσης GameObject και ΔΕΝ είναι static πεδίο της κλάσης [όπως το GameObject.Find() που θα αναφερθεί παρακάτω]. Συνεπώς, η συνάρτηση αυτή αφορά στο αντικείμενο στο οποίο είναι προσαρτημένο το script. Η λειτουργία της συνάρτησης αυτής είναι, προφανώς, να ενεργοποιεί και να απενεργοποιεί το αντικείμενο και, κατά συνέπεια να το εμφανίζει και να το κρύβει αντίστοιχα. 8. Find & GetComponent Για λόγους καλής πρακτικής, σε πολλές περιπτώσεις δεν θα θέλαμε να υπάρχουν πολλά public πεδία για αποφυγή του υπερβολικού drag and drop, οπότε θα ήταν πιο χρήσιμο να είχαμε private πεδία. Για να δώσουμε τα απαραίτητα components στα πεδία αυτά μέσω κώδικα χρησιμοποιούνται συχνά συναρτήσεις όπως η Find και η GetComponent. Η σύνταξη των δύο αυτών συναρτήσεων είναι η εξής: GameObject.Find(string name); 30

31 GetComponent<[Τύπος Component]>(); ή transform.getcomponent<[τύπος Component]>(); ή gameobject. GetComponent<[Τύπος Component]>(); Στην περίπτωση της συνάρτησης Find δεν αναφερόμαστε σε συγκεκριμένο αντικείμενο αλλά στην κλάση GameObject διότι η συνάρτηση Find είναι static. Αυτό διακρίνεται από το γεγονός πως το GameObject.Find(string name); έχει το πρώτο γράμμα κεφαλαίο, γεγονός που υποδεικνύει αναφορά στην κλάση και όχι σε συγκεκριμένο αντικείμενο. Αντίθετα, η συνάρτηση GetComponent αναφέρεται σε κάποιο συγκεκριμένο transform ή gameobject προκειμένου να ανακτήσει το component του αντίστοιχου τύπου. Ακολουθούν παραδείγματα χρήσης των παραπάνω συναρτήσεων: Παρατηρούνται τα εξής: Στη γραμμή 8 δημιουργείται μια αναφορά τύπου AudioListenerη οποία αντιστοιχίζεται στο component AudioListener που έχει το αντικείμενο στο οποίο προσαρτάται το script. Σε περίπτωση που δεν βρεθεί το component αυτό, θα υπάρξει error εντός του παιχνιδιού. Στη γραμμή 9 δημιουργείται μια αναφορά τύπου Light η οποία αντιστοιχίζεται στο component Light ενός αντικειμένου στη σκηνή με το όνομα Lamp. Είναι σημαντικό να υπάρχει ακρίβεια στο όνομα. Στη γραμμή 10 δημιουργείται μια αναφορά τύπου Transform η οποία αντιστοιχίζεται στο component Transform του αντικειμένου με το όνομα Item όπως ακριβώς και στη γραμμή 9. Το συγκεκριμένο παρατίθεται για να τονιστεί το γεγονός πως το πεδίο transform θα μπορούσε κάλλιστα να αντικατασταθεί από μια συνάρτηση GetComponent<Transform>. Σημειώνεται πως η συνάρτηση Find ψάχνει σε όλα τα αντικείμενα της σκηνής για να βρει το αντικείμενο που ψάχνει, ενώ η συνάρτηση GetComponent ψάχνει σε όλα 31

32 τα components του αντίστοιχου αντικειμένου. Για το λόγο αυτό αυτές οι συναρτήσεις μπορούν να είναι αρκετά κοστοβόρες και δεν θα ήταν σοφό να χρησιμοποιούνται σε συναρτήσεις όπως η Update. 9. Rigidbody Η κλάση Rigidbody είναι η κλάση που περιλαμβάνει όλες τις λειτουργίες που αφορούν την αναπαράσταση ιδιοτήτων ενός αντικειμένου ως αντικείμενο στον φυσικό κόσμο. Ένα αντικείμενο με Rigidbody component θα μπορεί να το επηρεάζει η βαρύτητα, να αντιδράει με το περιβάλλον του καθώς και να δέχεται και να δυνάμεις. Με βάση τις συναρτήσεις τις κλάσης αυτής προσομοιώνουμε φυσικές ιδιότητες σε ένα αντικείμενο, και για τον λόγο αυτό, ένα αντικείμενο με το component αυτό θα είναι αρκετά κοστοβόρο σε σχέση με αντικείμενα χωρίς το Rigidbody component. Πλέον, καθώς και η Unity3D σαν engine αλλά και οι υπολογιστές εξελίσσονται, υπάρχει δυνατότητα υποστήριξης πολλών αντικειμένων με Rigidbody ταυτόχρονα, χωρίς, ωστόσο, αυτό να σημαίνει πως δεν θα έπρεπε να είμαστε σχετικά φειδωλοί με αυτά τα αντικείμενα. Η συνάρτηση της κλάσης που θα συναντάται πιο συχνά θα είναι η AddForce, η οποία εμφανίζεται ως εξής: Για να έχουμε πρόσβαση στο Rigidbody component του αντικειμένου (εφόσον αυτό υπάρχει) το αποθηκεύουμε σε μια private μεταβλητή χρησιμοποιώντας την GetComponent. Ειδάλλως,κάθε φορά που θέλαμε να αναφερθούμε σε κάποιο πεδίο ή συνάρτηση του component αυτού θα έπρεπε να χρησιμοποιούσαμε την συνάρτηση GetComponent, γεγονός κακό για την επίδοση του script όπως αναφέρθηκε παραπάνω. Η AddForce συντάσσεται όπως και η συνάρτηση Translate της κλάσης Transform. Δέχεται σαν κυρίως όρισμα ένα Vector3 το οποίο δηλώνει την κατεύθυνση προς την 32

33 οποία ασκούμε δύναμη στο αντικείμενο. Στο συγκεκριμένο παράδειγμα, κατά την αρχή του προγράμματος ασκείται μια δύναμη προς τα πάνω με παράγοντα 5 στο αντικείμενο. Να σημειωθεί πως, αφού ισχύουν διαφορετικές υλοποιήσεις της φυσικής σε 3D και 2D χώρο, υπάρχει σαν κλάση το Rigidbody2D που περιλαμβάνει αντίστοιχες λειτουργίες με αυτές του Rigidbody, απλά εφαρμοσμένες στο 2D χώρο. Σημειώνεται επίσης, πως η χρήση της AddForce γίνεται συχνά για να προσομοιωθεί το άλμα σε έναν χαρακτήρα. 10. Inputs Εδώ θα αναφερθούν οι βασικές συνθήκες που χρησιμοποιούνται για την εισαγωγή εισόδου από τον χρήστη. Η είσοδος αυτή μπορεί να αφορά στην ανίχνευση εισόδου είτε από πληκτρολόγιο είτε από ποντίκι, και μπορεί να γίνει μέσω του Input Manager της Unity3D ή με πιο hard coded τρόπους. Μέσω Input Manager: Το Input Manager αποτελεί μέρος των ρυθμίσεων της Unity3D και είναι προσβάσιμο μέσω του μονοπατιού Edit > Project Settings > Input. Σε αυτό περιλαμβάνονται άξονες και κουμπιά που ορίζονται μέσα στη μηχανή και αντιστοιχίζονται σε διάφορους τρόπους εισόδου ανάλογα με τις επιλογές εξαγωγής του παιχνιδιού. Για παράδειγμα, ο άξονας Horizontal αντιστοιχεί στα κουμπιά A και D καθώς και στο αριστερό και δεξί βέλος του πληκτρολογίου, ενώ ταυτόχρονα αντιστοιχεί και στις οριζόντιες κινήσεις ενός joystick ή ενός χειριστηρίου. Όλη αυτή η πληροφορία μπορεί να προσπελαστεί μέσω των εντολών που θα δειχθούν παρακάτω. Σημειώνεται πως είναι καλύτερο να χρησιμοποιείται η είσοδος μέσω του Input Manager καθώς δίνει μεγαλύτερη 33

34 ελευθερία στην ανάθεση πλήκτρων και μεθόδων εισόδου και επιτρέπει στον παίκτη την αλλαγή αυτών των ρυθμίσεων πιο εύκολα. o Input.GetAxis(string AxisName)/Input.GetAxisRaw(string AxisName) Οι συναρτήσεις αυτές επιστρέφουν τιμές από -1 έως 1 οι οποίες αντιστοιχούν στο ποια είσοδος δόθηκε βάσει του άξονα. Έστω το εξής παράδειγμα: Με τον τρόπο που παρουσιάζεται στο παράδειγμα θα ήταν δυνατό να κατασκευαστεί ένας controller για έναν χαρακτήρα. Εντός της Update θα γίνονται με τη σειρά έλεγχοι για το αν ο παίκτης πατάει κάτι που αντιστοιχεί στο «δεξιά», έπειτα στο «αριστερά», στο «πάνω» και στο «κάτω». Το 1 στον οριζόντιο άξονα αντιστοιχεί στο «δεξιά» ενώ το -1 στο «αριστερά». Αντίστοιχα, το 1 στον κατακόρυφο άξονα αντιστοιχεί στο «πάνω» ενώ το -1 στο «κάτω». Η διαφορά μεταξύ GetAxis και GetAxisRaw είναι πως με την πρώτη συνάρτηση υπάρχει μια μικρή χρονική μετάβαση από το 0 μέχρι το 1 ή το -1, παίρνοντας τις ενδιάμεσες πραγματικές τιμές, ενώ με την GetAxisRaw το αποτέλεσμα θα είναι μόνο -1, 0 ή 1 και όχι κάποια ενδιάμεση τιμή. Στα πλαίσια του υπολογιστή, ο οριζόντιος άξονας αντιστοιχεί στα A, D/αριστερό βέλος, δεξί βέλος, ενώ ο κατακόρυφος στα W, S/πάνω βέλος, κάτω βέλος. o Input.GetButton(string ButtonName)/ Input.GetButtonDown(string ButtonName)/ Input.GetButtonUp(string ButtonName) Οι συναρτήσεις αυτές επιστρέφουν bool και εκφράζουν το αν είναι πατημένο το κουμπί στο όρισμα, αν πατήθηκε μία φορά ή αν 34

35 σταμάτησε να πατιέται αντίστοιχα. Ο τρόπος χρήσης του είναι ο παρακάτω: Σημειώνεται πως στα πλαίσια του υπολογιστή, το πλήκτρο που αντιστοιχεί στο Fire1 είναι το αριστερό κλικ και το αριστερό Control, ενώ για το κουμπί Jump το κουμπί είναι το Space. Η πληροφορία ως προς το σε ποια πλήκτρα αντιστοιχούν τα κουμπιά και οι άξονες βρίσκεται εντός του Input Manager. Hard coded λύσεις: Υπάρχουν και ορισμένες συναρτήσεις που ελέγχουν πότε κάποιο συγκεκριμένο πλήκτρο ή κουμπί πατήθηκε. Οι συναρτήσεις αυτές έχουν το μειονέκτημα πως είναι πολύ συγκεκριμένες και δεν απευθύνονται σε εύρος τρόπων εισόδου καθώς παίρνουν σαν όρισμα ένα κωδικό που απευθύνεται σε συγκεκριμένο πλήκτρο του πληκτρολογίου ή του ποντικιού. Επίσης, αν δεν γίνουν με τέτοιο τρόπο ώστε ο κωδικός αυτός να είναι δημόσιος, ο παίκτης ΔΕΝ θα μπορεί να αλλάξει τις λειτουργίες των πλήκτρων. Παρά τα μειονεκτήματα αυτά, κρίνεται σκόπιμο να γίνουν αναφορές στις συναρτήσεις αυτές: o Input.GetKey(KeyCode key)/ Input.GetKeyDown(KeyCode key)/ Input.GetKeyUp(KeyCode key) Αυτό το σύνολο συναρτήσεων λειτουργεί με ίδιο τρόπο όπως οι αντίστοιχες Input.GetButton με τη διαφορά ότι απευθύνονται αποκλειστικά σε είσοδο πληκτρολογίου και ότι σαν όρισμα παίρνουν ένα αντικείμενο τύπου KeyCode το οποίο έχει τη μορφή «KeyCode.πλήκτρο». Χρήση των συναρτήσεων φαίνεται στο παρακάτω παράδειγμα: 35

36 o Input.GetMouseButton(int button)/ Input.GetMouseButtonDown(int button)/ Input.GetMouseButtonUp(int button) Οι συναρτήσεις αυτές δουλεύουν με όμοιο τρόπο με τις πιο πάνω, με τη διαφορά πως απευθύνονται σε πλήκτρα ποντικιού και παίρνουν σαν πιο συχνά ορίσματα τους αριθμούς 0,1 και 2 που αντιστοιχούν στο αριστερό, δεξί και μεσαίο κλικ αντίστοιχα. Χρήση τους φαίνεται στο εξής παράδειγμα: Σε όλα τα τελευταία παραδείγματα ισχύει πως όταν η συνάρτηση έχει Down στο τέλος ελέγχεται μόνο τη στιγμή που θα πατηθεί το πλήκτρο/κουμπί, όταν έχει Up ελέγχεται η στιγμή που θα σταματήσει να πατιέται και όταν δεν έχει κάποια από αυτές τις λέξεις στο τέλος, ελέγχεται συνέχεια αν πατιέται. 36

37 Σημειώνεται επίσης πως θέλουμε τέτοιες συναρτήσεις ελέγχου εισόδου να είναι σε κάποια ταχεία επαναλαμβανόμενη διαδικασία όπως η Update, καθώς ο έλεγχος για είσοδο θέλουμε να γίνεται όσο γίνεται πιο τακτικά. 11. Colliders & Triggers Ίσως από τα πιο σημαντικά στοιχεία ενός video game είναι τα events που συμβαίνουν με διάδραση στα αντικείμενα, όπως με τη σύγκρουση μαζί τους ή με την είσοδο σε μια συγκεκριμένη περιοχή. Τέτοια events μπορούν να χρησιμοποιηθούν σε πληθώρα εφαρμογών, όπως, για παράδειγμα, ένα σύστημα μάχης, ή ένα σύστημα που πυροδοτεί διαφορετικά event με την είσοδο του παίκτη σε έναν χώρο. Τόσο οι colliders όσο και τα triggers αποτελούν περιοχές στο χώρο (2D ή 3D) οι οποίες μπορεί να εξυπηρετούν διάφορους σκοπούς. Η κύρια διαφορά τους είναι πως οι colliders εμποδίζουν στοιχεία με άλλους colliders να προσπελάσουν τη περιοχή και πρακτικά αποτελούν «αόρατους τοίχους», ενώ τα triggers είναι αόρατες περιοχές στις οποίες οποιοδήποτε αντικείμενο έχει πρόσβαση. Συνεπώς, οι colliders υπάρχουν για να προσομοιώνουν τη σύγκρουση δυο φυσικών αντικειμένων (και να μεταφέρουν οποιαδήποτε πληροφορία αφορά τη σύγκρουση αυτή), ενώ τα triggers αφορούν στη μετάδοση πληροφοριών για τα αντικείμενα που εισέρχονται, μένουν ή εξέρχονται από αυτά. Σημειώνεται πως προκειμένου τα triggers να αναγνωρίσουν ένα αντικείμενο, αυτό το αντικείμενο θα πρέπει να έχει collider. Ο τρόπος εισαγωγής ενός collider γίνεται μέσω του αντίστοιχου component (Box collider, Sphere collider κλπ): Προκειμένου το συγκεκριμένο component να λειτουργεί ως trigger αρκεί να γίνει checked το κουτί Is Trigger. Παρατηρείται πως υπάρχουν πεδία που ορίζουν τι περιοχή θα καλύπτει αυτός ο collider καθώς και ένα πεδίο για Physic Material. Συνοπτικά, τα Physic Materials είναι στοιχεία που περιέχουν φυσικές ιδιότητες για 37

38 έναν collider, όπως το πόση τριβή θα έχει ή το πόσο bouncy θα είναι. Εφόσον δεν δοθεί κάποιο, διατηρεί default τιμές. Σημειώνεται, επίσης, πως για 2D αντικείμενα, υπάρχουν αντίστοιχοι 2D colliders/triggers (Box collider 2D κλπ). Οι συναρτήσεις οι οποίες καλούνται ανάλογα με τη διάδραση με ένα collider/trigger είναι οι εξής: void OnCollisionEnter(Collision other) void OnCollisionStay(Collision other) void OnCollisionExit(Collision other) void OnTriggerEnter(Collider other) void OnTriggerStay(Collider other) void OnCollisionExit(Collider other) Για 2D triggers/colliders οι συναρτήσεις έχουν την εξής μορφή: void OnCollisionEnter2D(Collision2D other) void OnCollisionStay2D(Collision2D other) void OnCollisionExit2D(Collision2D other) void OnTriggerEnter2D(Collider2D other) void OnTriggerStay2D(Collider2D other) void OnCollisionExit2D(Collider2D other) Αξίζει να σημειωθεί πως οι συναρτήσεις που αφορούν collisions έχουν σαν όρισμα ένα Collision (δομή με πληροφορίες ως προς την επαφή-σύγκρουση των αντικειμέννω) ενώ οι συναρτήσεις που αφορούν triggers έχουν σαν όρισμα τον Collider του αντικειμένου με το οποίο ήρθε σε επαφή το παρόν αντικείμενο. Όπως είναι ίσως εμφανές από το όνομα, ανάλογα με την κατάληξη (Enter, Stay ή Exit) η κάθε συνάρτηση θα εκτελεστεί κατά την πρώτη επαφή, όσο γίνεται επαφή ή όσο σταματάει να γίνεται επαφή με κάποιο αντικείμενο, αντίστοιχα με τις συνθήκες εισόδου ( GetKeyDown/GetKey/GetKeyUp). Τέλος, σημειώνεται πως προκειμένου να κληθούν οι συναρτήσεις αυτές, θα πρέπει τουλάχιστον ένα από τα 2 αντικείμενα που έρχονται σε επαφή να έχουν ένα Rigidbody component (και στην περίπτωση της οικογένειας συναρτήσεων OnCollision, θα πρέπει το Rigidbody component να είναι non-kinematic). 38

39 Ακολουθεί σύντομο παράδειγμα χρήσης συναρτήσεων των παραπάνω οικογενειών: Ο έλεγχος για το tag γίνεται ώστε οι συναρτήσεις να καλούνται κατά την επαφή με συγκεκριμένα αντικείμενα, και όχι με κάθε collider στη σκηνή. 12. Coroutines Τα coroutines αποτελούν ειδικό είδος συναρτήσεων οι οποίες έχουν την ιδιότητα να σταματάνε την εκτέλεσή τους και να τη συνεχίζουν στο επόμενο frame. Είναι πάρα πολύ χρήσιμα σε περιπτώσεις που αφορούν σταδιακή μεταβολή μιας τιμής καθώς μπορούν να συμπεριφέρονται σαν τη συνάρτηση Update, ενώ στη πραγματικότητα εκτελούνται παράλληλα με αυτή. Επιπλέον, τα coroutines είναι ο μοναδικός τρόπος στη C# να δηλωθεί πως κάποιες εντολές θα εκτελεστούν μετά το πέρασμα ορισμένων δευτερολέπτων. Ακολουθεί παράδειγμα που υποδεικνύει τον τρόπο σύνταξης της δήλωσης ενός coroutine: 39

40 Το παρόν παράδειγμα μειώνει σε κάθε frame τη τιμή του value μέχρι αυτή να γίνει 0. Αν ο αντίστοιχος κώδικας ήταν σε μια απλή συνάρτηση, τότε το σώμα της συνάρτησης θα εκτελούταν σε ένα frame και απλά θα έκανε τη τιμή του value ίση με το 0 κατευθείαν. Το συγκεκριμένο coroutine όταν αρχίσει να εκτελείται θα περιμένει 10 δευτερόλεπτα και έπειτα θα εκχωρήσει το 0 στη τιμή του πεδίου value. Αυτό το παράδειγμα λειτουργεί ακριβώς όπως και το 1 ο, με τη διαφορά πως μετά από κάθε μείωση του πεδίου value, η συνάρτηση θα περιμένει 1 δευτερόλεπτο. Επίσης, η κλήση ενός coroutine δεν γίνεται όπως σε κάθε άλλη συνάρτηση, αλλά μέσω της συνάρτησης StartCoroutine. Για παράδειγμα: Τα coroutines μπορούν να έχουν ορίσματα όπως μια οποιαδήποτε συνάρτηση, και δίνονται σαν ορίσματα εντός του coroutine που δίνεται ως όρισμα στη StartCoroutine(). 40

41 Τέλος, αξίζει να επισημανθούν και άλλες 2 συναρτήσεις: η StopCoroutine([κάποιο coroutine]) και η StopAllCoroutines(). Όπως υποδεικνύει και το όνομα, οι συναρτήσεις αυτές χρησιμοποιούνται για να διακόψουν τη λειτουργία κάποιου συγκεκριμένου ή όλων των coroutines αντίστοιχα. 13. Raycasting Οι ακτίνες (rays) έχουν μεγάλη χρησιμότητα στα παιχνίδια, καθώς αποτελούν νοητές ευθείες από ένα σημείο σε ένα άλλο αναγνωρίζοντας τυχόν αντικείμενα στην πορεία τους. Συνεπώς, μπορούν να βρουν εφαρμογή στη προσομοίωση του οπτικού πεδίου ενός χαρακτήρα, καθώς και σε μηχανισμούς που αφορούν όπλα. Το raycasting είναι η διαδικασία εκπομπής τέτοιων ακτίνων και η εφαρμογή της μπορεί να έχει την ακόλουθη μορφή: Σημειώνεται πως υπάρχουν και άλλοι τρόποι για να επιτευχθεί το ίδιο αποτέλεσμα, καθώς και ειδικές παράμετροι που μπορούν να προστεθούν για να ορίσουν τη μέγιστη απόσταση της ακτίνας καθώς και ποια layers να αγνοήσει η ακτίνα. Όπως και με κάθε στοιχείο που αφορά τη βιβλιοθήκη φυσικής της Unity, έτσι και το raycasting έχει ειδική σύνταξη σε περιβάλλον 2D η οποία μπορεί να είναι ως εξής: 41

42 Το παράδειγμα αυτό εξυπηρετεί τόσο τον σκοπό της επίδειξης των 2D παραλλαγών για την κλάση RaycastHit και Physics όσο και τον σκοπό της επίδειξης ενός διαφορετικού τρόπου για εκπομπή ενός ray. Με παρόμοιο τρόπο θα μπορούσε να συνταχθεί και το 1 ο παράδειγμα. Τέλος, αντίστοιχη ευελιξία διαχείρισης παρέχεται και στο 2D API, σε ό,τι αφορά απόσταση ακτίνας και layers που μπορεί να αγνοήσει η ακτίνα. 42

43 Κεφάλαιο 4: Παραδείγματα 1. Απλό 2D character controller 43

44 2. Συμπεριφορά για όπλο με χρήση Raycasting σε 2D περιβάλλον 44

Scripting σε Unity. Μέρος 1 ο

Scripting σε Unity. Μέρος 1 ο Scripting σε Unity Μέρος 1 ο Κανόνας class = component = class = script Ορατότητα πεδίων Κάθε script που φτιάχνουμε αποτελείται από μια public κλάση η οποία περιέχει πεδία που μπορεί να είναι public, private

Διαβάστε περισσότερα

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

Διαβάστε περισσότερα

Scripting σε Unity. Μέρος 2ο

Scripting σε Unity. Μέρος 2ο Scripting σε Unity Μέρος 2ο Lerp Ο όρος lerp προκύπτει από την έννοια του linear interpolation (γραμμική παρεμβολή), και αφορά στη λειτουργίας ομαλής μετάβασης από μια τιμή σε μια άλλη. Εντός του API της

Διαβάστε περισσότερα

Unity editor. Μέρος 2ο

Unity editor. Μέρος 2ο Unity editor Μέρος 2ο Είδη εικόνων Textures: Εικόνες που χρησιμοποιούνται για να «ντύσουν» ένα τρισδιάστατο αντικείμενο. Μπορούν να είναι πολλαπλών τύπων (diffuse, normal map, height map etc). Sprites:

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το

Διαβάστε περισσότερα

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010 Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010 Δημιουργία ενός απλού παιχνιδιού με το Gamemaker (μετάφραση από το http://www.stuffucanuse.com/downloads/gamemaker-introductionlessons/free_game_downloads_gamemaker.htm)

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά και κοινή συμπεριφορά. Ένα καλούπι/πρότυπο

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors Μαθήματα από το lab Ένα πρόγραμμα αποτελείται από διάφορες κλάσεις και αντικείμενα αυτών των κλάσεων. Μία από τις κλάσεις

Διαβάστε περισσότερα

Τιμή Τιμή. σκορ. ζωές

Τιμή Τιμή. σκορ. ζωές Εισαγωγή στην έννοια των μεταβλητών Οι μεταβλητές Θα πρέπει να έχετε παρατηρήσει ότι έχουμε φτιάξει τόσα παιχνίδια μέχρι αυτό το σημείο και δεν έχουμε αναφερθεί πουθενά για το πως μπορούμε να δημιουργήσουμε

Διαβάστε περισσότερα

2.1 Αντικειµενοστρεφής προγραµµατισµός

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

Τα Windows Πολύ Απλά και Πολύ Σύντομα

Τα Windows Πολύ Απλά και Πολύ Σύντομα Σαχπατζίδης Αβραάμ Καθηγητής Πληροφορικής Π.Ε 20 Master of Arts (M.A) in "Gender, New Forms of Education, New Forms of Employment and New Technologies in the Information Age". Τα Windows Πολύ Απλά και

Διαβάστε περισσότερα

Οπτική Επικοινωνία 4 - Α.Ε Προτεινόμενες ρυθμίσεις V-Ray 3.4 για Rhino. Υλικά

Οπτική Επικοινωνία 4 - Α.Ε Προτεινόμενες ρυθμίσεις V-Ray 3.4 για Rhino. Υλικά Οπτική Επικοινωνία 4 - Α.Ε.2017-2018 Προτεινόμενες ρυθμίσεις V-Ray 3.4 για Rhino Υλικά Στα αρχεία Rhino που προορίζονται για Rendering συνιστάται να διαχωρίζετε τα αντικείμενα σε Layers ανάλογα με υλικό/υφή

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

αντίστοιχο γεγονός. Όταν όντως το κουμπί

αντίστοιχο γεγονός. Όταν όντως το κουμπί Εισαγωγή στην αλληλεπίδραση Τα έργα που έχουμε αναπτύξει έως τώρα τρέχουν ένα σενάριο και σταματούν. Τα αντικείμενά μας αλλάζουν θέση και ενδυμασίες, παίζουν διαφορετικούς ήχους και ζωγραφίζουν διάφορα

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

Βασικές εισαγωγικές έννοιες

Βασικές εισαγωγικές έννοιες Στην άσκηση αυτή θα εξοικειωθείτε με τη βασική διαχείριση οντοτήτων μέσω εφαρμοζόμενων scripts στο περιβάλλον Unity 3D, σχεδιάζοντας τις βασικές οντότητες, αποδίδοντας τους ιδιότητες υλικού και προγραμματίζοντας

Διαβάστε περισσότερα

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Εργαστήριο 1-1 η Άσκηση - Ανάλυση Εργαστήριο 1-1 η Άσκηση - Ανάλυση Εκφώνηση: Δημιουργείστε εφαρμογή σε Java Swing με χρήση του IDE NetBeans όπου θα παρουσιάζεται ποιο κουμπί πατήθηκε. Η εφαρμογή θα μοιάζει ως εξής: Πρώτο Βήμα: Αρχική

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,

Διαβάστε περισσότερα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class

Διαβάστε περισσότερα

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Πως θα κατασκευάσω το πρώτο πρόγραμμα; Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να γίνει εξοικείωση το μαθητών με τον ΗΥ και το λειτουργικό σύστημα. - Επίδειξη του My Computer

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων

Διαβάστε περισσότερα

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος 4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος Μεταβλητές Συστήματος Η Processing χρησιμοποιεί κάποιες μεταβλητές συστήματος, όπως τις ονομάζουμε, για να μπορούμε να παίρνουμε πληροφορίες από το

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Μαθήματα από τα εργαστήρια ΕΡΓΑΣΤΗΡΙΟ 1 Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο

Διαβάστε περισσότερα

Σενάριο 17: Παιχνίδι μνήμης με εικόνες

Σενάριο 17: Παιχνίδι μνήμης με εικόνες Σενάριο 17: Παιχνίδι μνήμης με εικόνες Φύλλο Εργασίας Τίτλος: Παιχνίδι μνήμης με εικόνες Γνωστικό Αντικείμενο: Εφαρμογές Πληροφορικής-Υπολογιστών Διδακτική Ενότητα: Διερευνώ - Δημιουργώ Ανακαλύπτω, Συνθετικές

Διαβάστε περισσότερα

1ο μέρος 1. Φτιάχνουμε την πίστα. Μια ενδεικτική πίστα φαίνεται παρακάτω:

1ο μέρος 1. Φτιάχνουμε την πίστα. Μια ενδεικτική πίστα φαίνεται παρακάτω: 1ο μέρος 1. Φτιάχνουμε την πίστα. Μια ενδεικτική πίστα φαίνεται παρακάτω: Εικόνα 1 Για να φτιάξουμε το τείχος επιλέγουμε καταρχήν την καρτέλα Γραφικά (κάτω δεξιά) και έπειτα το γεμάτο τετράγωνο από την

Διαβάστε περισσότερα

Μεταβλητές. Για περισσότερες λεπτομέρειες πάνω στις μεταβλητές θα ήταν χρήσιμο να διαβάσεις το

Μεταβλητές. Για περισσότερες λεπτομέρειες πάνω στις μεταβλητές θα ήταν χρήσιμο να διαβάσεις το Τάξη : Α Λυκείου Λογισμικό : Scratch Ενδεικτική Διάρκεια : 45 λεπτά Μεταβλητές Όλα όσα έμαθες στα προηγούμενα φυλλάδια είναι απαραίτητα για να υλοποιήσεις απλές εφαρμογές. Ωστόσο αν θέλεις να δημιουργήσεις

Διαβάστε περισσότερα

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι 21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB Αλγόριθμος Διαδικασία Παράμετροι Τι είναι Αλγόριθμος; Οι οδηγίες που δίνουμε με λογική σειρά, ώστε να εκτελέσουμε μια διαδικασία ή να επιλύσουμε ένα

Διαβάστε περισσότερα

Οδηγίες για το Geogebra Μωυσιάδης Πολυχρόνης Δόρτσιος Κώστας

Οδηγίες για το Geogebra Μωυσιάδης Πολυχρόνης Δόρτσιος Κώστας Οδηγίες για το Geogebra Μωυσιάδης Πολυχρόνης Δόρτσιος Κώστας Η πρώτη οθόνη μετά την εκτέλεση του προγράμματος διαφέρει κάπως από τα προηγούμενα λογισμικά, αν και έχει αρκετά κοινά στοιχεία. Αποτελείται

Διαβάστε περισσότερα

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων Τι θα μάθουμε σήμερα: Να αναφέρουμε τα κύρια χαρακτηριστικά ενός Γραφικού Περιβάλλοντος Επικοινωνίας Να εξηγούμε τη χρήση των κουμπιών του

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

Δημιουργία τρισδιάστατου παιχνιδιού οδήγησης 1ο μέρος

Δημιουργία τρισδιάστατου παιχνιδιού οδήγησης 1ο μέρος Μάθημα 6ο Δημιουργία τρισδιάστατου παιχνιδιού οδήγησης 1ο μέρος Σε αυτό το μάθημα θα μάθουμε πως να εξάγουμε τον τρισδιάστατο κόσμο που έχουμε δημιουργήσει στο 3DS Max, πως θα τον εισάγουμε στο Director,

Διαβάστε περισσότερα

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

Διαβάστε περισσότερα

Unity Editor #03 Κεντρικό Μενού: Edit

Unity Editor #03 Κεντρικό Μενού: Edit Unity Editor #03 Κεντρικό Μενού: Edit Συνεχίζουμε λοιπόν με το κεντρικό μενού. Ας δούμε τι μας κρύβει η επιλογή Edit. Όπως βλέπεις στην εικόνα, μας δίνει πολλές δυνατότητες. Πολλές βέβαια από αυτές είναι

Διαβάστε περισσότερα

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Nα κατασκευάσουν πίνακες από δεδομένα. Να κατασκευάσουν συναρτήσεις με πίνακες. Να κάνουν χρήση

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

Διαβάστε περισσότερα

Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη

Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη Πώς βλέπουμε τις ιδιότητες των αντικειμένων που έχουμε δημιουργήσει; Ανοίγουμε το σενάριο CarWorld και δημιουργούμε μερικά αντικείμενα των κλάσεων

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Δημιουργία δισδιάστατου παιχνιδιού, τύπου Pacman. 1ο μέρος.

Δημιουργία δισδιάστατου παιχνιδιού, τύπου Pacman. 1ο μέρος. Μάθημα 4ο Δημιουργία δισδιάστατου παιχνιδιού, τύπου Pacman. 1ο μέρος. Σε αυτό το μάθημα θα δημιουργήσουμε ένα απλό παιχνίδι με τη βοήθεια του Director. Το παιχνίδι θα είναι στο ύφος του γνωστού Pacman,

Διαβάστε περισσότερα

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites Σκοπός της 10ης άσκησης είναι να μάθουμε να χρησιμοποιούμε sprites και να φτιάξουμε ένα παιχνίδι που χρησιμοποιεί συγκρούσεις. Θα δούμε επίσης μερικά

Διαβάστε περισσότερα

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Σύντομες εισαγωγικές σημειώσεις για την. Matlab Σύντομες εισαγωγικές σημειώσεις για την Matlab Δήλωση Μεταβλητών Για να εισάγει κανείς δεδομένα στη Matlab υπάρχουν πολλοί τρόποι. Ο πιο απλός είναι στη γραμμή εντολών να εισάγουμε αυτό που θέλουμε και

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο

Διαβάστε περισσότερα

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

Διαβάστε περισσότερα

Unity Μια Πρώτη Ματιά

Unity Μια Πρώτη Ματιά Unity Μια Πρώτη Ματιά Ωραία. Ελπίζω ότι όλα πήγαν καλά με την εγκατάσταση. Πριν ξεκινήσουμε με τη Unity πρέπει να δημιουργήσουμε ένα Unity Id. Αυτός θα είναι ο λογαριασμός μας στη Unity. Θα χρησιμοποιήσουμε

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Dcad 1.0

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Dcad 1.0 ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Dcad 1.0 20130510 ΠΕΡΙΕΧΟΜΕΝΑ 1. Εγκατάσταση προγράμματος DCAD 2 2. Ενεργοποίηση Registration 2 3. DCAD 3 3.1 Εισαγωγή σημείων 3 3.2 Εξαγωγή σημείων 5 3.3 Στοιχεία ιδιοκτησίας

Διαβάστε περισσότερα

Δομή Επιλογής. 1. Αν ο σκύλος ακουμπήσει ένα κόκαλο τότε το κόκαλο εξαφανίζεται και ο παίκτης κερδίζει 10 πόντους.

Δομή Επιλογής. 1. Αν ο σκύλος ακουμπήσει ένα κόκαλο τότε το κόκαλο εξαφανίζεται και ο παίκτης κερδίζει 10 πόντους. Τάξη : Α Λυκείου Λογισμικό : Scratch Ενδεικτική Διάρκεια : 45 λεπτά Δομή Επιλογής Μία από τις πιο σημαντικές δομές που χρησιμοποιείται στον προγραμματισμό είναι η δομή επιλογής. Η δομή αυτή μας δίνει την

Διαβάστε περισσότερα

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5)

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5) ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ Τοποθετώ μια δισκέτα στον οδηγό τη δισκέτας του υπολογιστή. Τοποθετώ τη δισκέτα που έχει το αρχείο μου στον οδηγό τη δισκέτας του υπολογιστή.

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

«Τέχνη, εικονική πραγµατικότητα και πολυχρηστικά συστήµατα καλλιτεχνικής έκφρασης».

«Τέχνη, εικονική πραγµατικότητα και πολυχρηστικά συστήµατα καλλιτεχνικής έκφρασης». ΕΛΛΗΝΟΓΑΛΛΙΚΟ ΜΕΤΑΠΤΥΧΙΑΚΟ (MASTER) «Τέχνη, εικονική πραγµατικότητα και πολυχρηστικά συστήµατα καλλιτεχνικής έκφρασης». Τµήµα Εικαστικών Τεχνών, Ανωτάτη Σχολή Καλών Τεχνών Τµήµα Arts et Technologies de

Διαβάστε περισσότερα

Κλάσεις και αντικείμενα #include <iostream.h<

Κλάσεις και αντικείμενα #include <iostream.h< Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι Μαθήματα από το lab Boolean μεταβλητές: Συνήθως τα ονόματα που δίνουμε στις boolean μεταβλητές περιγράφουν

Διαβάστε περισσότερα

Games: Εξοικείωση με το περιβάλλον του Game Maker μέσα από την κατασκευή ενός παιχνιδιού

Games: Εξοικείωση με το περιβάλλον του Game Maker μέσα από την κατασκευή ενός παιχνιδιού Games: Εξοικείωση με το περιβάλλον του Game Maker μέσα από την κατασκευή ενός παιχνιδιού Εκτιμώμενη διάρκεια: Τέσσερις διδακτικές ώρες Ένταξη στο πρόγραμμα σπουδών Στο νέο Πρόγραμμα Σπουδών του Γυμνασίου

Διαβάστε περισσότερα

1. Ποια μεγέθη ονομάζονται μονόμετρα και ποια διανυσματικά;

1. Ποια μεγέθη ονομάζονται μονόμετρα και ποια διανυσματικά; ΚΕΦΑΛΑΙΟ 2 ο ΚΙΝΗΣΗ 2.1 Περιγραφή της Κίνησης 1. Ποια μεγέθη ονομάζονται μονόμετρα και ποια διανυσματικά; Μονόμετρα ονομάζονται τα μεγέθη τα οποία, για να τα προσδιορίσουμε πλήρως, αρκεί να γνωρίζουμε

Διαβάστε περισσότερα

Tank Rescue Computer Game σε Scratch

Tank Rescue Computer Game σε Scratch Tank Rescue Computer Game σε Scratch Μπέλτσος Νικόλαος 1, Παναγιωτόπουλος Ευάγγελος 2, Παπαδόπουλος Βασίλης 3, Παπουδάρης Κωνσταντίνος 4 1 sokin2@yahoo.gr 2 vaggelispan@yahoo.gr 3 papadopoulos_vasilis@yahoo.gr

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

Εκπαιδευτικά παιχνίδια φυσικής, ανεπτυγμένα στο Unity

Εκπαιδευτικά παιχνίδια φυσικής, ανεπτυγμένα στο Unity ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Εκπαιδευτικά παιχνίδια φυσικής, ανεπτυγμένα στο Unity Αντώνιος Α. Αραβαντινός

Διαβάστε περισσότερα

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

Διαβάστε περισσότερα

Breakdance Computer Game σε Scratch.

Breakdance Computer Game σε Scratch. Breakdance Computer Game σε Scratch. Ταστίογλου Μαριάννα 1, Τραντοπούλου Μαργαρίτα 2 1 Μαθήτρια Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου atas94@otenet.gr 2 Μαθήτρια Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου daizy@in.gr Δασκαλάκης

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

ΣΕΛΙ Α 1 ΚΕΦΑΛΑΙΟ 1 - ΑΡΧΙΚΑ

ΣΕΛΙ Α 1 ΚΕΦΑΛΑΙΟ 1 - ΑΡΧΙΚΑ ΣΕΛΙ Α 1 ΚΕΦΑΛΑΙΟ 1 - ΑΡΧΙΚΑ Πως αλλάζω γλώσσα; 1 ος τρόπος Συνδυασµός πλήκτρων αριστερό Ctrl + Shift 2 ος τρόπος Από την ένδειξη γλώσσας στην γραµµή εργασιών Πως βάζω τον τόνο ; (Εφόσον βρίσκοµαι στα

Διαβάστε περισσότερα

1. Τι είναι η Κινηματική; Ποια κίνηση ονομάζεται ευθύγραμμη;

1. Τι είναι η Κινηματική; Ποια κίνηση ονομάζεται ευθύγραμμη; ΚΕΦΑΛΑΙΟ 2 ο ΚΙΝΗΣΗ 2.1 Περιγραφή της Κίνησης 1. Τι είναι η Κινηματική; Ποια κίνηση ονομάζεται ευθύγραμμη; Κινηματική είναι ο κλάδος της Φυσικής που έχει ως αντικείμενο τη μελέτη της κίνησης. Στην Κινηματική

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης του «Μαθη.Συ.»

Εγχειρίδιο Χρήσης του «Μαθη.Συ.» Εργαστήριο Εκπαιδευτικής Τεχνολογίας Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών Φιλοσοφική Σχολή Τμήμα Φ.Π.Ψ., Τομέας Παιδαγωγικής Διευθυντής: Καθ. Χ. Κυνηγός Εγχειρίδιο Χρήσης του «Μαθη.Συ.» Πίνακας

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι

Διαβάστε περισσότερα

Η εντολή «επανέλαβε Χ»

Η εντολή «επανέλαβε Χ» Η εντολή «επανέλαβε Χ» Όπως είδαμε πιο πάνω, η εντολή για πάντα είναι χρήσιμη σε διάφορα προγράμματα όταν π.χ. θέλουμε να δείξουμε την κίνηση της γης γύρω από τον ήλιο ή για να αναπαραστήσουμε το δίλημμα

Διαβάστε περισσότερα

Κίνηση ΚΕΦΑΛΑΙΟ 2 Β ΓΥΜΝΑΣΙΟΥ

Κίνηση ΚΕΦΑΛΑΙΟ 2 Β ΓΥΜΝΑΣΙΟΥ Κίνηση ΚΕΦΑΛΑΙΟ 2 Β ΓΥΜΝΑΣΙΟΥ 2.1 Περιγραφή της Κίνησης 1. Τι είναι η Κινηματική; Ποια κίνηση ονομάζεται ευθύγραμμη; Κινηματική είναι ο κλάδος της Φυσικής που έχει ως αντικείμενο τη μελέτη της κίνησης.

Διαβάστε περισσότερα

Παράδειγμα «Ημίτονο και ζωγραφική!»: Έχει δει στα μαθηματικά τη γραφική παράσταση της συνάρτησης του ημιτόνου; Σας θυμίζει κάτι η παρακάτω εικόνα;

Παράδειγμα «Ημίτονο και ζωγραφική!»: Έχει δει στα μαθηματικά τη γραφική παράσταση της συνάρτησης του ημιτόνου; Σας θυμίζει κάτι η παρακάτω εικόνα; Τελεστές, συνθήκες και άλλα! Όπως έχει διαφανεί από όλα τα προηγούμενα παραδείγματα, η κατασκευή κατάλληλων συνθηκών στις εντολές εάν, εάν αλλιώς, για πάντα εάν, περίμενε ώσπου, επανέλαβε ώσπου, είναι

Διαβάστε περισσότερα

Περιεχόμενα. Λίγα λόγια από το συγγραφέα Windows Vista Επιφάνεια εργασίας Γραμμή εργασιών... 31

Περιεχόμενα. Λίγα λόγια από το συγγραφέα Windows Vista Επιφάνεια εργασίας Γραμμή εργασιών... 31 Περιεχόμενα Λίγα λόγια από το συγγραφέα... 7 91 Windows Vista... 9 92 Επιφάνεια εργασίας... 18 93 Γραμμή εργασιών... 31 94 Χειρισμός παραθύρων... 53 95 Το παράθυρο Υπολογιστής... 77 96 Το μενού Έναρξη...

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1 Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave Περιεχόμενο εργαστηρίου: - Το περιβάλλον ανάπτυξης προγραμμάτων Octave - Διαδικασία ανάπτυξης προγραμμάτων MATLAB - Απλά

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Η εξέλιξη των γλωσσών προγραμματισμού Η εξέλιξη των γλωσσών προγραμματισμού είναι μια διαδικασία αφαίρεσης Στην αρχή ένα πρόγραμμα ήταν

Διαβάστε περισσότερα

Atlantis - Νέο user interface

Atlantis - Νέο user interface New Desktop 1 Atlantis - Νέο user interface ATLANTIS - ΝΕΟ USER INTERFACE... 2 ΓΕΝΙΚΗ ΠΑΡΟΥΣΙΑΣΗ... 3 ΓΡΑΜΜΗ ΣΥΣΤΗΜΑΤΟΣ... 4 ΜΠΑΡΑ ΧΡΗΣΤΗ (USER TOOLBAR)... 5 ΚΕΝΤΡΙΚΟ ΜΕΝΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ... 6 Κεντρικό

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό με C++

Εισαγωγή στον Προγραμματισμό με C++ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό με C++ Ενότητα # 9: Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό Κωνσταντίνος Κουκουλέτσος Τμήμα

Διαβάστε περισσότερα

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να καταλάβουν την διαφορά ανάμεσα σε τοπικές και καθολικές μεταβλητές. Nα κάνουν αποσφαλμάτωση

Διαβάστε περισσότερα

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες: Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 3 Java Classes Java Objects

Διαβάστε περισσότερα

Texturing, Animation, Lighting, Rendering

Texturing, Animation, Lighting, Rendering Μάθημα 2ο Texturing, Animation, Lighting, Rendering Materials Σε αυτό το σημείο έχουμε τελειώσει με τη διαδικασία του modeling, και αυτό που έχουμε σαν αποτέλεσμα είναι ένα σύνολο από αντικείμενα, τα οποία

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6 Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα της γλώσσας C, το Dev-C++, το οποίο είναι εφαρμογή που τρέχει

Διαβάστε περισσότερα

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA 2 «Μονάδα Μετάφρασης» 2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit)

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 9: Συναρτήσεις Εμβέλεια Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστικών Συστημάτων

Διαβάστε περισσότερα

Εφαρμογές Πληροφορικής στην Τοπογραφία 8η Ενότητα - Scripting στο AutoCAD Παραδείγματα

Εφαρμογές Πληροφορικής στην Τοπογραφία 8η Ενότητα - Scripting στο AutoCAD Παραδείγματα Εφαρμογές Πληροφορικής στην Τοπογραφία 8η Ενότητα - Scripting στο AutoCAD Παραδείγματα Τσιούκας Βασίλειος, Αναπληρωτής Καθηγητής Τμήμα Αγρονόμων Τοπογράφων Μηχανικών Θεσσαλονίκη, Φεβρουάριος 2014 Άδειες

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή Οποιαδήποτε κλάση

Διαβάστε περισσότερα

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό 5 ο Εργαστήριο Λογικοί Τελεστές, Δομές Ελέγχου Λογικοί Τελεστές > μεγαλύτερο = μεγαλύτερο ή ίσο!= διαφορετικό Οι λογικοί τελεστές χρησιμοποιούνται για να ελέγξουμε

Διαβάστε περισσότερα

Τι είναι κλάση Κλάση

Τι είναι κλάση Κλάση 35 Τι είναι κλάση Κλάση είναι μια συλλογή από μεταβλητές. Αλλιώς είναι ένα σύνολο από: δεδομένα που δηλώνουν τα χαρακτηριστικά της κλάσης (τι είναι) και συναρτήσεις που προδιαγράφουν την συμπεριφορά της

Διαβάστε περισσότερα

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?

Διαβάστε περισσότερα

Εισαγωγή στην επανάληψη

Εισαγωγή στην επανάληψη Εισαγωγή στην επανάληψη Στο κεφάλαιο αυτό ήρθε η ώρα να μελετήσουμε την επανάληψη στον προγραμματισμό λίγο πιο διεξοδικά! Έχετε ήδη χρησιμοποιήσει, χωρίς πολλές επεξηγήσεις, σε προηγούμενα κεφάλαια τις

Διαβάστε περισσότερα

Τα Φύλλα Εργασίας αφορά την εκμάθηση της εκτέλεσης της δομής επιλογής μέσα από το περιβάλλον του SCRATCH.

Τα Φύλλα Εργασίας αφορά την εκμάθηση της εκτέλεσης της δομής επιλογής μέσα από το περιβάλλον του SCRATCH. 15. ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΦΥΛΛΩΝ ΕΡΓΑΣΙΑΣ Τα Φύλλα Εργασίας αφορά την εκμάθηση της εκτέλεσης της δομής επιλογής μέσα από το περιβάλλον του SCRATCH. 16. ΑΞΙΟΛΟΓΗΣΗ Οι βασικές διαδικασίες αξιολόγησης προέρχονται

Διαβάστε περισσότερα