Προγραμματισμός

Βιβλία προγραμματισμού παιχνιδιών Java: Μια συγκριτική κριτική

Ο προγραμματισμός παιχνιδιών είναι αυτό που με έφερε στους υπολογιστές πριν από 15 χρόνια. Αν είστε καθόλου σαν εμένα, τότε το μαγικό, έντονα χρωματισμένο κινούμενο σχέδιο που εκπέμπεται από παιχνίδια στον υπολογιστή σας προσελκύει σαν σκώρο στο φως. Αλλά το να γοητεύεστε από παιχνίδια στον υπολογιστή (και τα εσωτερικά τους) και να μπορείτε να τα προγραμματίζετε είναι δύο διαφορετικά πράγματα συνολικά. Έπρεπε να μάθω το εμπόριο με τον σκληρό τρόπο - κοιτάζοντας τα παιχνίδια για ώρες μέχρι να μπορούσατε βλέπω πώς λειτούργησαν. Αυτές τις μέρες μπορείτε να εξαπατήσετε και να πάρετε μια συντόμευση: Πάρτε ένα βιβλίο και απλώς "mind meld" με τον έμπειρο προγραμματιστή που διασπά όλη την εμπειρία, τις συμβουλές και τα κόλπα του.

Έχοντας υπόψη ότι ορισμένα βιβλία Java (δείτε το βιβλίο Laura Lemay που παρατίθεται παρακάτω στην ενότητα Πόροι) αυτές τις μέρες θέλουν να σας οδηγήσουν σε διαφορετικές διαδρομές συνολικά, θα μπορούσατε να κάνετε χειρότερα πράγματα από το να εμπιστευτείτε έναν (εμπορικό) προγραμματιστή παιχνιδιών για να ελέγξετε τον τρέχοντα διαθέσιμα βιβλία προγραμματισμού παιχνιδιών Java.

Τέσσερις τίτλοι έφτασαν στο κατώφλι μου για αυτήν την κριτική:

  • Προγραμματισμός παιχνιδιών Black Art of Java, από τους Joel Fan, Eric Ries και Calin Tenitchi (Waite Group Press)

  • Προγραμματισμός παιχνιδιών Java Cutting-Edge, των Neil Bartlett, Steve Simkin και Chris Stranc (Coriolis Group Books)

  • Ανάπτυξη εφαρμογών Java Entertainment, από τον John Withers (Wiley)

  • Διδάξτε τον εαυτό σας προγραμματισμό παιχνιδιών Διαδικτύου με Java, από τον Michael Morrison (Sams.net)

Πριν εξετάσω λεπτομερώς τα βιβλία, ας ξεκινήσουμε με έναν πίνακα που σας δίνει μια γενική εικόνα των κύριων χαρακτηριστικών τους:

Πίνακας 1: Επισκόπηση βιβλίων προγραμματισμού παιχνιδιών Java.

Τίτλος (Εκδότης)Τιμή (US $)ΣελίδεςΚεφάλαια (Παραρτήματα)ΜΟΝΑΔΑ ΟΠΤΙΚΟΥ ΔΙΣΚΟΥ?ΣυγγραφείςΑντικείμενο - ΠροσανατολισμόςΔικτυωμένη εστίαση πολλαπλών χρηστώνFocus Framework παιχνιδιού
Προγραμματισμός παιχνιδιών Black Art of Java (Αναμονή)49.9993320 (5)Ναί3++

Πολύ

Καλός

ΚαλόςΚαλός
Προγραμματισμός παιχνιδιών Java Cutting-Edge (Coriolis)39.9952321 (2)Ναί3

Πολύ

Καλός

Πολύ

Καλός

Πολύ

Καλός

Ανάπτυξη εφαρμογών Java Entertainment (Γουίλι)29.9539210 (0)Οχι1ΦτωχόςΦτωχόςΜέση τιμή
Διδάξτε τον εαυτό σας προγραμματισμό παιχνιδιών Διαδικτύου με Java (Sams.net)39.9941621 (3)Ναί1Μέση τιμήΚαλόςΚανένας

Για να περιγράψει τις επικεφαλίδες του πίνακα, η στήλη Object-Orientation επισημαίνει σε ποιο βαθμό οι συγγραφείς του αντίστοιχου βιβλίου χρησιμοποίησαν την Java με τον τρόπο που προορίζεται να χρησιμοποιηθεί: με αντικειμενοστρεφή τρόπο. Τα καλά βιβλία Java, ανεξάρτητα από το επίκεντρό τους, επιβάλλουν ορθές αντικειμενοστρεφείς πρακτικές. Τα κατώτερα βιβλία χρησιμοποιούν Java σαν να ήταν C ή Pascal - δηλαδή, με διαδικαστικό τρόπο. Τα παιχνίδια είναι πολύ καλές υποψήφιες εφαρμογές που επωφελούνται από το σχεδιασμό και την υλοποίηση χρησιμοποιώντας αντικειμενικό προσανατολισμό, οπότε ένα καλό βιβλίο παιχνιδιών Java καλύτερα να είναι ισχυρό στο OOA / OOD / OOP (OO Analysis, Design, Programming).

Η στήλη Networked Multi-User Focus επισημαίνει πόσο εστιάζει το βιβλίο στις ισχυρότερες δυνατότητες προγραμματισμού παιχνιδιών της Java: δικτυακά παιχνίδια πολλαπλών χρηστών.

Η στήλη Game Framework Focus επισημαίνει σε ποιο βαθμό το βιβλίο βασίζεται σε ένα πλαίσιο παιχνιδιών για να εξηγήσει και να αναπτύξει τον προγραμματισμό παιχνιδιών. Τα πλαίσια παιχνιδιών είναι state-of-the-art APIs παιχνιδιών που εξαλείφουν πολλές από τις τυπικές εργασίες που πρέπει να εκτελέσουν όλα τα παιχνίδια (διαχείριση sprite, βαφή οθόνης, διατήρηση βαθμολογίας και ούτω καθεξής).

Τώρα, ρίξτε μια ματιά στα βιβλία λεπτομερώς.

Προγραμματισμός παιχνιδιών Black Art of Java

Προγραμματισμός παιχνιδιών Black Art of Java είναι ένα από αυτά τα βιβλία τύπου Βίβλου - και οι 933 σελίδες αυτού. Το βιβλίο είναι λογικά δομημένο σε τρία μέρη:

  1. "Βασικές αρχές ανάπτυξης παιχνιδιών Java"
  2. "Προηγμένες τεχνικές παιχνιδιών και γραφικών"
  3. "Γκαλερί παιχνιδιών"

Το Μέρος 1, το οποίο γράφτηκε εξ ολοκλήρου από τον κύριο συγγραφέα του βιβλίου (Joel Fan), πλέκει με έμπειρο τρόπο τα τρία βασικά θέματα της Java, του αντικειμενικού προσανατολισμού και των βασικών προγραμμάτων προγραμματισμού παιχνιδιών σε ένα σαφές, αναζωογονητικό και συνεκτικό σύνολο.

Το μέρος 2 εστιάζει στη δικτύωση και στις τεχνικές 3D. Ένα κεφάλαιο αναπτύσσει ένα σύστημα διαχείρισης υψηλού σκορ από διακομιστή, ενώ ένα άλλο αναπτύσσει ένα ολόκληρο σύστημα συνομιλίας. Και τα δύο αυτά συστήματα συνεπάγονται προγράμματα από την πλευρά του πελάτη και του διακομιστή (μικροεφαρμογές και διακομιστές, με άλλα λόγια). Τα δύο μόνο κεφάλαια που ασχολούνται με το 3D διαβάζονται σαν ένα βιβλίο μέσα σε ένα βιβλίο: Σε περισσότερες από 110 σελίδες, ο Calin Tenitchi ξεπερνά όλα τα κλασικά βασικά στοιχεία 3D και, στο δεύτερο κεφάλαιο, αναλύει τη χρήση ενός μεγάλου αλλά πολύ καλά σχεδιασμένου πλαισίου παιχνιδιών 3D που ονομάζεται App3DCore. Με το επίσημο Java 3D API στον ορίζοντα, αυτό το μέρος του βιβλίου σύντομα θα είναι μερικώς ξεπερασμένο, αν και μεγάλο μέρος του πλαισίου ασχολείται με πτυχές υψηλότερου επιπέδου από το Java 3D, οπότε αυτό δεν αποτελεί πρόβλημα για το βιβλίο. Εν πάση περιπτώσει, το να εξηγηθεί το εσωτερικό ενός τέτοιου τρισδιάστατου πλαισίου είναι πολύ διαφωτιστικό.

Το μέρος 3, η Γκαλερί Παιχνιδιών, περιέχει οκτώ κεφάλαια, καθένα από τα οποία αναπτύσσει ένα ολόκληρο παιχνίδι. Τα παιχνίδια διαφέρουν ως προς την πολυπλοκότητα, η οποία μου έδωσε την εντύπωση ότι αυτό το μέρος του βιβλίου ήταν μάλλον βιαστικά συγκεντρωμένο. Ο ατομικός σχεδιασμός και η εφαρμογή των παιχνιδιών είναι (συνολικά) της ίδιας υψηλής ποιότητας με το υπόλοιπο βιβλίο. Υπάρχει ένας κλώνος αστεροειδών που βασίζεται σε φορέα, το Othello, ένα Mahjong που βασίζεται στον Ιστό, ένα παιχνίδι οριζόντιας κύλισης, ένα παιχνίδι εκπαίδευσης λέξεων, δύο διαφορετικά παιχνίδια μαγικής τετραγωνικής και μια ενσάρκωση του κλασικού παιχνιδιού Worm (ή Snake, αν προτιμάτε) .

Αν και το βιβλίο δεν είναι χωρίς το μερίδιο των δυσλειτουργιών του, των σφαλμάτων και ούτω καθεξής (για παράδειγμα, μια σελίδα περιέχει έναν κατάλογο κωδικών που διαχειρίζεται πέρα ​​από την πεποίθηση), μου άρεσε πολύ. Το βιβλίο έχει πολλά πλεονεκτήματα και λίγες αδυναμίες. Είναι ισχυρή στην καλή ανάλυση και σχεδιασμό προγραμμάτων. (Αχ! Νομίζατε ότι θα μπορούσατε να παραλείψετε αυτά τα στάδια μόνο και μόνο επειδή είναι παιχνίδια; Λάθος.) Το βιβλίο χρησιμοποιεί αποτελεσματικά διάφορους τύπους διαγραμμάτων (διαγράμματα αντικειμένων, διαγράμματα τάξεων, διαγράμματα ροής, διαγράμματα μηχανικής κατάστασης, διαγράμματα πρωτοτύπων οθόνης και ούτω καθεξής) , και οι περισσότερες καταχωρίσεις κώδικα είναι πολύ ευανάγνωστες. (Αυτή η πτυχή, όπως το στυλ γραφής, κυμαίνεται από συγγραφέα σε συγγραφέα. Αυτή είναι η αναπόφευκτη πλευρά των βιβλίων που γράφτηκαν από πολλούς συγγραφείς.)

Προγραμματισμός παιχνιδιών Java Cutting-Edge

Συνήθως είμαι πολύ δύσπιστος για τους τίτλους που ξεκινούν με το "Advanced", "Cutting-Edge" και τα παρόμοια, απλά επειδή, συνήθως δεν είναι! Σε περίπτωση που Προγραμματισμός παιχνιδιών Java Cutting-Edge, Το τμήμα μάρκετινγκ της Coriolis δεν έκανε τίποτα: Το βιβλίο σίγουρα δεν είναι για αρχάριους ή προγραμματιστές Java μεσαίου επιπέδου. Στην πραγματικότητα, όλα εκτός από το πρώτο και το τελευταίο κεφάλαιο του βιβλίου είναι αφιερωμένα σε μια εις βάθος, χωρίς ανοησία ανάλυση του σχεδιασμού και της εφαρμογής δύο πλαισίων παιχνιδιών. Το πρώτο πλαίσιο εξυπηρετεί παιχνίδια ενός χρήστη (αυτόνομα) ενώ το δεύτερο προσανατολίζεται σε παιχνίδια πολλαπλών χρηστών που βασίζονται στο Διαδίκτυο.

Το Κεφάλαιο 2 περιλαμβάνει την πλήρη εφαρμογή ενός ολόκληρου κλώνου Asteroids που μπορεί να αναπαραχθεί, χωρίς τρεμόπαιγμα και χρησιμοποιεί ομαλή κίνηση και ήχο. Και αυτό σε μόλις 250 περίεργες γραμμές κώδικα - ή μόνο σε 18 σελίδες βιβλίων! Αυτό το κεφάλαιο, επομένως, πρέπει να πείσει οποιονδήποτε ότι η χρήση πλαισίων παιχνιδιών, και γενικά πλαισίων, είναι ένας από τους καλύτερους τρόπους για την επίτευξη υψηλών επιπέδων παραγωγικότητας προγραμματισμού, τονίζοντας την επαναχρησιμοποίηση του σχεδιασμού, παρά την επαναχρησιμοποίηση κώδικα (αλλά στη διαδικασία επαναχρησιμοποιώντας επίσης βουνά κώδικας).

Εάν το Κεφάλαιο 2 είναι ένα σαφές, πολλά υποσχόμενο σημάδι για την υψηλή ποιότητα αυτού του βιβλίου, τότε το Κεφάλαιο 3 ενισχύει αυτήν την εντύπωση εισάγοντας μας στο βασικό θέμα του βιβλίου: την εις βάθος εξερεύνηση ενός (πολύ) καλά σχεδιασμένου πλαισίου παιχνιδιών. Εν συντομία, ο συγγραφέας εξηγεί τι είναι οι κάρτες CRC (Class / Responsibilities / Collaborators), η ουσία των διαγραμμάτων τάξης Booch και τα διαγράμματα αλληλεπίδρασης μηνυμάτων αντικειμένων. Παρεμπιπτόντως, αυτό δεν είναι γεμάτο σελίδα επειδή το υπόλοιπο βιβλίο χρησιμοποιεί αυτά τα ισχυρά εργαλεία μηχανικής λογισμικού για να βελτιώσει το κείμενο!

Το πλαίσιο παιχνιδιού ενός χρήστη, που ονομάζεται GameWorks, βασίζεται στη δοκιμασμένη μεταφορά προγραμματισμού παιχνιδιών μιας σκηνής που κατοικείται από ηθοποιούς. Χρησιμοποιώντας αυτή τη διαισθητική αφαίρεση, μπορείτε να εφαρμόσετε οποιοδήποτε είδος παιχνιδιού - από κλασικά επιτραπέζια παιχνίδια έως γρήγορα, γεμάτα δράση παιχνίδια arcade. Ήμουν ελαφρώς απογοητευμένος που οι συγγραφείς επέλεξαν τα παιχνίδια καρτών ως παράδειγμα στυλ παιχνιδιού (προτιμώ κάτι που κάνει την αδρεναλίνη να ρέει), παρόλο που καταφέρνουν να υφαίνουν σε όλα τα τυπικά ζητήματα και τεχνικές, και έτσι εξειδικευμένα (μεταξύ άλλων: επεξεργασία εικόνας, διαχείριση εισόδου, sprites, βελτιστοποιημένη ανανέωση οθόνης, ήχος, τυχαιότητα, τεχνητή νοημοσύνη).

Αν και το βιβλίο δεν είναι δομημένο γύρω από μέρη, θα έπρεπε να ήταν. Υπάρχει μια σαφής εναλλαγή εστίασης από το κεφάλαιο 15 και μετά. Το Κεφάλαιο 15, «Προγραμματισμός Παιχνιδιών Δικτύου», αντιπροσωπεύει μια συγκεκριμένη αλλαγή σε υψηλότερο επίπεδο, με έναν νέο συγγραφέα να κάνει τη γραφή. Αφού εισήγαγε τα κύρια θέματα που σχετίζονται με παιχνίδια που βασίζονται στο δίκτυο (τοπολογίες σύνδεσης, λανθάνουσα κατάσταση, συγχρονισμός κατάστασης παιχνιδιού), το βιβλίο αναπτύσσει έναν κλώνο του Risk, το κλασικό επιτραπέζιο παιχνίδι στρατηγικής (που ονομάζεται Domination in the book). Η κυριαρχία είναι μόνο μια δικαιολογία για την ανάπτυξη ενός νέου πλαισίου παιχνιδιών που απευθύνεται στη γενική κατηγορία παιχνιδιών πολλαπλών χρηστών με δυνατότητα δικτύου. Αυτά τα πέντε τελευταία κεφάλαια είναι δύσκολα, και υποψιάζομαι ότι οι αναγνώστες χωρίς κάποιο ιστορικό επικοινωνίας δεδομένων δεν θα αισθάνονται άνετα με τα πιο τεχνικά επιχειρήματα. Αλλά δεν υπάρχει κανένας τρόπος να παραλείψετε αυτά τα κεφάλαια: Περιέχουν μια πολύ διεξοδική αντιμετώπιση των κρίσιμων ζητημάτων της αποσυγχρονισμού της κατάστασης του παιχνιδιού και των προβλημάτων καθυστέρησης, καθώς και μια σειρά από ολοένα και πιο εξελιγμένες λύσεις.

Το βιβλίο ολοκληρώνεται με ένα κεφάλαιο για τη βελτιστοποίηση κώδικα και ένα ενδιαφέρον κεφάλαιο για το σχεδιασμό του FRED, ενός κλώνου "Doom" γραμμένο στην Java! Το FRED χρησιμοποιεί ακτίνες χύτευσης (ναι, σε Java) για να επιτύχει αυτήν την κλασική αίσθηση "Doom" και αυτή η βασική τεχνική εξηγείται λεπτομερώς.

Να συνοψίσουμε, Προγραμματισμός παιχνιδιών Java Cutting-Edge είναι εξαιρετικό. Το γράψιμο είναι διαυγές και αληθινό. Το λογισμικό που αναπτύσσουν οι συγγραφείς είναι πολύ υψηλής ποιότητας. Οι καταχωρίσεις είναι σαφείς και ευανάγνωστες και δεν ξέρω για εσάς, αλλά αφού διαβάσω τα προγράμματα άλλων ανθρώπων για 15 χρόνια, δεν θεωρώ την αναγνωσιμότητα του πηγαίου κώδικα ως πολυτέλεια).

Ανάπτυξη εφαρμογών Java Entertainment

Ανάπτυξη εφαρμογών Java Entertainment είναι ένα πολύ απογοητευτικό βιβλίο. Εάν ένας εκδότης σας έδωσε 400 σελίδες για να γεμίσετε ό, τι γνωρίζετε σχετικά με τον προγραμματισμό παιχνιδιών στην Java (εντάξει, εντάξει, "Java En-ter-tain-ment App-lets"), τότε δεν ξεκινάτε με ένα κεφάλαιο που επαναλαμβάνει, διαφήμιση ναυτία, η ιστορία της Java. Ή συνεχίστε με το "Java Fundamentals" (Κεφάλαιο 4), μια εντελώς περιττή αναδιατύπωση των βασικών γλωσσών (μεταβλητές, Unicode, εκφράσεις, σχόλια, ροή ελέγχου, αντικείμενα, τάξεις, πακέτα - το ονομάζετε!). Ο συγγραφέας εξακολουθεί να μην υποψιάζεται ότι μπορεί να επικεντρώνεται εντελώς σε λάθος θέμα, οπότε στο Κεφάλαιο 5, "Περισσότερες προηγμένες τεχνικές", κινείται με συστοιχίες, διανύσματα, συμβολοσειρές, εξαιρέσεις, multithreading, applets. Το να γίνεται τόσο ελαφρώς πιο ζεστό είναι το Κεφάλαιο 6, "Γραφικά, Ήχος και Εκδηλώσεις". Ωστόσο, θα είστε δύσκολοι για να βρείτε αναφορές στον προγραμματισμό παιχνιδιών εδώ. Αντίθετα, το πολύτιμο ακίνητο της σελίδας είναι αφιερωμένο στο να σας φέρει τουλάχιστον 13 στιγμιότυπα οθόνης μισής σελίδας από τα ασήμαντα αποτελέσματα του draw3DRect (), drawOval (), drawArc () και τα παρόμοια!

Στη μέση του βιβλίου (Κεφάλαιο 7, σελίδα 219) έχουμε την πρώτη εμφάνιση κάποιου Java παιχνίδι κωδικός, σε αυτήν την περίπτωση, μια προσπάθεια στο παιχνίδι πασιέντζας (σίγουρα, τα παιχνίδια καρτών πρέπει να είναι σεζόν). Ο σχεδιασμός του παιχνιδιού, η εφαρμογή του παιχνιδιού και η αναγνωσιμότητα των λιστών είναι τόσο κατώτερες σε σύγκριση με τις ίδιες πτυχές των άλλων βιβλίων σε αυτήν την κριτική που είναι σαφές Ανάπτυξη εφαρμογών Java Entertainment έχει προβλήματα.

Ορισμένες αξιοσημείωτες δηλώσεις του συγγραφέα και μια γενική αδράνεια ή κατάχρηση όρων που έχουν κρυστάλλινη σημασία, βοηθούν μόνο να βυθιστεί αυτό το βιβλίο προτού έχει την ευκαιρία να ταξιδέψει. Ο μηχανισμός διαχείρισης διάταξης του AWT επικρίνεται ως εξής: "Ο τρόπος χειρισμού της διάταξης είναι αρκετά αναπόφευκτος. Όχι ότι δεν έχει νόημα και δεν είναι για έναν καλό λόγο, αλλά εξακολουθεί να είναι ανεπαρκές." Το API δικτύωσης της Java δεν αρέσει επίσης στον συγγραφέα: "Ο τρόπος με τον οποίο η Java συνδέεται με άλλες τοποθεσίες στο Διαδίκτυο είναι σπασμένος και ενώ δεν είναι εντελώς άχρηστος, σίγουρα δεν είναι πολύ λειτουργικός στην τρέχουσα κατάστασή του." Παράξενο, θα ορκίζομαι ότι άλλοι και εγώ θα καταφέρουμε να δημιουργήσουμε αρκετά συναρπαστικά πράγματα με το ίδιο API (Web crawler, DAMPP - δείτε τους παρακάτω πόρους για αναφορές στο προηγούμενο JavaWorld άρθρα σχετικά με αυτά τα θέματα). Αυτό το τελευταίο απόσπασμα βγαίνει από το Κεφάλαιο 8, "Παιχνίδια για πολλούς παίκτες", όπου παρ 'όλα αυτά μας φαίνεται "ένα ηλίθιο μικρό παράδειγμα" (για να παραθέσουμε το βιβλίο) με τη μορφή μιας εφαρμογής συνομιλίας. (Άλλα παραδείγματα γλώσσας που δυσκολεύομαι να καταπιώ σε αυτό το βιβλίο είναι «να το τσιμπήσω στο κεφάλι σου» (σελ. 283), «και να φτύνω τα πράγματα πάνω από μια πρίζα» (σελ. 284), για να αναφέρω μόνο δύο.)

Δεν υπάρχει κάτι καλό να πούμε για αυτό το βιβλίο; Στην πραγματικότητα, υπάρχει: Το Κεφάλαιο 2, "Οι Αρχές του Σχεδιασμού Παιχνιδιού", είναι μια ενδιαφέρουσα ανάλυση του τι κάνει ένα καλό παιχνίδι καλό. Εδώ ο συγγραφέας λάμπει προσδιορίζοντας διάφορες πτυχές που έχουν όλα τα καλά παιχνίδια, όπως μια καλά σχεδιασμένη διεπαφή παιχνιδιών, η αλήθεια (επίπεδο ρεαλισμού), η προσαρμοστικότητα, το AI και ούτω καθεξής. Το επόμενο κεφάλαιο, "Σχεδιασμός παιχνιδιού σε δράση", αναλύει ορισμένα πραγματικά παιχνίδια και επισημαίνει τη χρήση καλών στοιχείων σχεδίασης παιχνιδιών. Στη συνέχεια, υπάρχει ένα μεγάλο κεφάλαιο (Κεφάλαιο 9) αφιερωμένο σε μια μελέτη και χρήση του Gamelet Toolkit (ένα δημόσιο πλαίσιο παιχνιδιού τομέα, γραμμένο από τον Mark Tacchi, το οποίο έλαβε ένα βραβείο JavaCup International). Αυτά τα τρία κεφάλαια είναι τα μόνα μέρη του βιβλίου που αξίζουν το χαρτί στο οποίο είναι τυπωμένα, φοβάμαι.

Διδάξτε τον εαυτό σας προγραμματισμό παιχνιδιών Διαδικτύου με Java

Οι συγκριτικές κριτικές είναι δύσκολες επειδή σπάνια υπάρχουν δύο (ή περισσότερα) βιβλία στην ίδια κατηγορία. Διδάξτε τον εαυτό σας προγραμματισμό παιχνιδιών Διαδικτύου με Java, σύμφωνα με το πίσω εξώφυλλο του, απευθύνεται σε χρήστες των κατηγοριών "νέα" έως "περιστασιακή". Αρχάριοι, με άλλα λόγια.

$config[zx-auto] not found$config[zx-overlay] not found