Alchemist` Δημοσ. 12 Σεπτεμβρίου 2009 Δημοσ. 12 Σεπτεμβρίου 2009 Τσεκάρετε την έκδοση 0.4c!!! ... Επιτέλους είναι έτοιμη!!![/b] Screenshots: ------- ------- ------- Screenshot από προηγούμενες έκδοσεις: Download Link (v0.4c): http://www.mediafire.com/download.php?aznfzdniitu (2.13Mb) Download Link (v0.3h): http://www.mediafire.com/download.php?ni2ikyiyiez (2.10Mb) Download Link (v0.3): http://www.mediafire.com/download.php?ml12n4zmmcm (2.02mb) Download Link (v0.2): http://www.fileshost.com/download.php?id=33422F181 Πως παίζεται: Ο παίτκης είναι ο μπλέ κύκλος και οι εχθροί οι πράσινοι. Αυτό είναι ένα test demo οπότε δεν έχει κανέναν ιδιαίτερο σκοπό, απλά προσπαθήστε να μείνετε ζωντανοί Κίνηση : WASD, ή με τα βελάκια Πυροβολισμός: Ο πυροβολισμός γίνεται με το ποντίκι, ο παίκτης σημαδεύει εκεί που δείχνει ο δείκτης του ποντικιού και ρίχνει κρατώντας πατημένο το αριστερό κλικ. Μπορείτε να πυροβολήσετε και με το CTRL. R: αλλάζει γεμιστήρα στο όπλο (δεν βγάζει κάποιο μύνημα όταν τελειώνει ο γεμιστήρας, απλά δεν πυροβολεί, θα το φτιάξουμε...) Shift: ο παίκτης τρέχει, δεν λειτουργεί ακόμη 0,1,2....9: Επιλογή όλπου, τα κουμπιά λειτουργούν μόνο εάν έχετε πάρει προηγουμένως το όπλο. Τα οπλα προς το παρόν είναι πεταμένα κάτω Version History: Version 0.4c *new interface design & implementation *different weapons have different accuracy *drastically improved collisions (thanks to iluvfuz from GMC forums) *objects react to light (i.e. if the player is under a light, he'll get brighter) *more realistic aiming & shooting for enemies (reaction times, realistic rotation) *weapons throw cartridges *bug fix, bullets don't hit pickable items Version 0.4 *improvement of dynamic Lights *improved enemy A.I. Version 0.3h *explosions don't affect objects that take cover behind walls *enemies don't see the player if he is behind a wall *weapons' function enhancements, shooting system improved *different bullet damage according to the weapon used *minor bug fixes *improved gfx *several A.I. enhancements *dynamic 2D surface lights Version 0.3 *added 10 weapons *new shooting system *the weapon that the player is holding is now visible (the sprite is just a black square, but coding is done) *added views (screen follows the player in a bigger room than the window) *added new sounds *fixed the position of reloading bars for player & enemies *bug fix, player was able to shoot before reloading process is finished 100% & reload even without ammo *bug fix, sometimes the reloading bar was assigned to a different object than the one that was actually reloading *improved collisions (they are yet kinda buggy) *fixed some minor glitches Version 0.2 *player can target & shoot *improved player control (WASD movement, use of mouse) *improved collisions *improved enemy AI *improved graphics (still test gfx) *added sounds & special effects Version 0.1 Οποιεσδήποτε προτάσεις/ιδέες/παράπονα/σχόλια δεκτά, ευχαριστώ!!! Το αρχικό μύνημα του thread... Καλημέρα... Ξεκινήσαμε με 2 φίλους να φτιάχνουμε ενα 2D Top Down Shooter, προς το παρόν είμαστε ακόμη στην engine και θα ήθελα μερική βοήθεια στο Α.Ι. Στην μηχανή υπάρχουν προς το παρόν 4 αντικείμενα... -player (μπλέ στην παρακάτω εικόνα) -enemy (κόκκινο) -enemy_bullet -wall (μαύρα τετράγωνα) Θέλω λοιπόν ο enemy, να μην πυροβολεί εφόσον , υπάρχουν εμπόδια (wall) στην διαδρομή που θα κάνει η σφαίρα για να χτυπήσει τον player... Να προβλέπει δλδ εάν ο παίκτης κρύβεται πίσω από κάποιον τοίχο. Προς το παρών χρησιμοποιώ αυτό τον κώδικα: >if ((point_direction(x,y,player.x,player.y)-5<point_direction(x,y,wall.x,wall.y))&&(point_direction(x,y,wall.x,wall.y)<point_direction(x,y,player.x,player.y)+5)) then { if (point_distance(x,y,wall.x,wall.y)<point_distance(x,y,player.x,player.y)) then{ obstacle = 1 } } else {obstacle = 0} //η μεταβλητή Obstacle δείχνει αν υπάρχει εμπόδιο Αλλά δεν λειτουργεί, και δεν μπορώ να καταλάβω γιατί... Έχει κανείς καμιά ιδέα, έστω και σε μορφή αλγορίθμου για το πώς να γίνει κάτι τέτοιο? Ευχαριστώ προκαταβολικά Αν θέλει κάποιος να δει την engine, ορίστε ένα screenshot και link... Έχει αρκετά προβλήματα, αλλα το δουλεύουμε (κυρίως στο collision του enemy με το wall)... Linky Link: http://www.fileshost.com/download.php?id=822351AF1
kagelos Δημοσ. 12 Σεπτεμβρίου 2009 Δημοσ. 12 Σεπτεμβρίου 2009 Ερώτηση : Η πίστα είναι χωρισμένη με grid? Δηλ. είναι ας πούμε 30x50 και κάθε αντικείμενο καταλαμβάνει τουλάχιστον ένα τετράγωνο και κάθε κίνηση είναι τουλάχιστον ένα τετράγωνο; Αν είναι έτσι θα ήταν πολύ βολικό να έχεις ένα Array σαν χάρτη για την πίστα σου το οποίο θα κάνεις update real time όσο παίζει το παιχνίδι. Ερώτηση 2η : Εφόσον ισχύει το παραπάνω, οι εχθροί πυροβολούν μόνο κάθετα και οριζόντια; Γίνεται να πυροβολήσουν προς οποιαδήποτε κατεύθυνση; Τις 2 πρώτες παραμέτρους από την point_direction δεν τις πιάνω. Μπορείς να εξηγήσεις λίγο τι κάνει; Δώσε λίγες πληροφορίες ακόμη (απαντώντας στα παραπάνω) και θα βρούμε μια λύση.
Alchemist` Δημοσ. 12 Σεπτεμβρίου 2009 Μέλος Δημοσ. 12 Σεπτεμβρίου 2009 Ερώτηση : Η πίστα είναι χωρισμένη με grid? Δηλ. είναι ας πούμε 30x50 και κάθε αντικείμενο καταλαμβάνει τουλάχιστον ένα τετράγωνο και κάθε κίνηση είναι τουλάχιστον ένα τετράγωνο; Αν είναι έτσι θα ήταν πολύ βολικό να έχεις ένα Array σαν χάρτη για την πίστα σου το οποίο θα κάνεις update real time όσο παίζει το παιχνίδι. Ερώτηση 2η : Εφόσον ισχύει το παραπάνω, οι εχθροί πυροβολούν μόνο κάθετα και οριζόντια; Γίνεται να πυροβολήσουν προς οποιαδήποτε κατεύθυνση; Τις 2 πρώτες παραμέτρους από την point_direction δεν τις πιάνω. Μπορείς να εξηγήσεις λίγο τι κάνει; Δώσε λίγες πληροφορίες ακόμη (απαντώντας στα παραπάνω) και θα βρούμε μια λύση. Καταρχήν ευχαριστώ για τον χρόνο σου Δεν είναι grid-based η κίνηση... Δεν υπάρχουν καν grids... Η κίνηση είναι εντελώς ελεύθερη και πυροβολούν προς οποιαδήποτε κατεύθυνση... point_direction(x1,y1,x2,y2) δίνει ως αποτέλεσμα την κατεύθυνση σε μοίρες (δλδ μπορεί να έχει ακεραιες τιμές απο 0 μέχρι 359)... Θα μπορούσε να γραφεί το παραπάνω και ως point_direction(self.x,self.y,player.x,player.y) για να γίνει πιο κατανοητό...
Acid_raiN Δημοσ. 12 Σεπτεμβρίου 2009 Δημοσ. 12 Σεπτεμβρίου 2009 Το έτρεξα λίγο παρατήρησα ότι αν με κρύβει κάποιο wall οι σφαίρες δεν περνάνε. Ίσως θα μπορούσες πριν ρίξεις την σφαίρα να ρίξεις μία αόρατη ή οποία αν βρει σε wall να κάνει το obstacle 1.
Alchemist` Δημοσ. 12 Σεπτεμβρίου 2009 Μέλος Δημοσ. 12 Σεπτεμβρίου 2009 Δοκιμάζω τώρα μια άλλη μέθοδο με την συνάρτηση collision_line, αλλά πάλι τζίφος :/ Βασικά όλος ο κώδικας για το enemy, σε περίπτωση που ενδιαφέρεται κανείς να βοηθήσει, η απλά και να δει πως γίνεται κάτι τέτοιο... CREATE event >obstacle_check = -1 obstacle = 0 bullet_count = 0 stop_fire = 0 direction_previous = 0 fire_direction = 0 battle_engage = 0 fire_counter = 0 direction = 0 ammo = 299 cover_possible = false cover_id = 0 profile = 1 //(1,2,3 --->harder) react_count = 0 step_counter = 0 turn = 0 reloading = 0 //collision with wall dir = 0 STEP event >//------------------------------------- //When Battle is engaged //easy enemy if (profile = 1) then{ if (distance_to_object(player)<180) then { react_count = react_count + 1 if (react_count = 30) then{ battle_engage = 1 stop_fire = 0 } } } //medium enemy if (profile = 2) then{ if (distance_to_object(player)<200) then { react_count = react_count + 1 if (react_count = 20) then{ battle_engage = 1 stop_fire = 0 } } } //hard enemy if (profile = 3) then{ if (distance_to_object(player)<220) then { react_count = react_count + 1 if (react_count = 10) then{ battle_engage = 1 stop_fire = 0 } } } //END of when battle engaged //------------------------------------------------------- //FIRING if (stop_fire=0) then { if (battle_engage = 1) then { if (fire_direction < point_direction(x,y,player.x,player.y)) then { fire_direction = fire_direction + 1 } if (fire_direction > point_direction(x,y,player.x,player.y)) then { fire_direction = fire_direction - 1 } fire_counter = fire_counter + 1 if (ammo > 0) then{ if (((fire_counter)mod(5)) = 0) then{ if (bullet_count = 15) then { stop_fire = 1 reloading = 1 instance_create(x,y,reloading_OBJ) bullet_count = 0 } if (not(instance_exists(reloading_OBJ))) then { stop_fire = 0 reloading = 0 } if ((stop_fire = 0)&&(reloading = 0)&&(obstacle=0)) then { instance_create(x,y,en_bullet_OBJ) bullet_count = bullet_count + 1 } } } } } //MOVEMENT if battle engage = 1 if (battle_engage = 1) then { if (((fire_counter)mod(5))= 0) then{ speed = 5 direction = point_direction(x,y,player.x,player.y) + 180 if (distance_to_object(player)>150) then { speed = 0 } if ((distance_to_object(player)>250)) then { stop_fire = 1 speed = 5 direction = point_direction(x,y,player.x,player.y) } } } //refire if distance becomes again small if (battle_engage = 1) then{ if (profile = 1) then{ if (distance_to_object(player)<251) then { stop_fire = 0 } } } if (battle_engage = 2) then{ if (profile = 1) then{ if (distance_to_object(player)<251) then { stop_fire = 0 } } } if (battle_engage = 1) then{ if (profile = 3) then{ if (distance_to_object(player)<251) then { stop_fire = 0 } } } //keep fire counter small if (fire_counter = 5000) then { fire_counter = 0 } //check if obstacles on the way (not working) obstacle_check = collision_line(x,y,player.x,player.y,wall,true,all) if (obstacle_check > 0) then { obstacle=1} else {obstacle=0} COLLISION event (WALL) >direction_previous = direction x = xprevious y = yprevious dir = choose(1,2) if (dir=1) then{ move_contact_solid(direction+180,2) move_outside_solid(direction+90,1) direction = direction_previous + 90 speed = 5 } if (dir=2) then { move_contact_solid(direction+180,2) move_outside_solid(direction-90,1) direction = direction_previous - 90 speed = 5 } COLLISION event (ENEMY) >direction_previous = direction x = xprevious y = yprevious dir = choose(1,2) if (dir=1) then{ move_contact_solid(direction+180,1) move_outside_solid(direction+180,1) direction = direction_previous + 90 } if (dir=2) then { move_contact_solid(direction+90,1) move_outside_solid(direction+180,1) direction = direction_previous - 90 } ---------- Το μήνυμα προστέθηκε στις 16:25 ---------- Το έτρεξα λίγο παρατήρησα ότι αν με κρύβει κάποιο wall οι σφαίρες δεν περνάνε.Ίσως θα μπορούσες πριν ρίξεις την σφαίρα να ρίξεις μία αόρατη ή οποία αν βρει σε wall να κάνει το obstacle 1. Χμμ, καλή ιδέα, αλλά πως θα δουλεύει ακριβώς? γιατί το ότι η σφαίρα θα βρεί σε τοίχο είναι σίγουρο, ακόμη και αν αυτός δεν βρίσκεται ανάμεσα στους 2... Η σφαίρα σαν αντικείμενο όταν ακουμπάει στον τοίχο αυτοκαταστρέφεται, γ αυτό και δεν περνάνε όπως παρατήρησες... Πως θα του πεις όμως εαν ο τοίχος στον οποίο ακούμπησε η αόρατη σφαίρα αποτελέι εμπόδιο και δεν είναι π.χ. ο ακριανός του δωματίου?
kagelos Δημοσ. 12 Σεπτεμβρίου 2009 Δημοσ. 12 Σεπτεμβρίου 2009 Λοιπόν ο παρακάτω κώδικας ελέγχει αν υπάρχει τοίχος ανάμεσα από τον εχθρό και τον παίχτη και είναι πολύ γρήγορος : >[color="#8000ff"]bool[/color] IsWallBetween([color="#2b91af"]PointF[/color] player, [color="#2b91af"]PointF[/color] enemy, [color="#2b91af"]PointF[/color] wall) { [color="#0000ff"][b]if[/b][/color] ([color="#2b91af"]Math[/color].Abs((enemy.Y - player.Y) * (wall.X - player.X) - (wall.Y - player.Y) * (enemy.X - player.X)) >= [color="#2b91af"]Math[/color].Max([color="#2b91af"]Math[/color].Abs(enemy.X - player.X), [color="#2b91af"]Math[/color].Abs(enemy.Y - player.Y))) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]if[/b][/color] ((enemy.X < player.X && player.X < wall.X) || (enemy.Y < player.Y && player.Y < wall.Y)) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]if[/b][/color] ((wall.X < player.X && player.X < enemy.X) || (wall.Y < player.Y && player.Y < enemy.Y)) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]if[/b][/color] ((player.X < enemy.X && enemy.X < wall.X) || (player.Y < enemy.Y && enemy.Y < wall.Y)) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]if[/b][/color] ((wall.X < enemy.X && enemy.X < player.X) || (wall.Y < enemy.Y && enemy.Y < player.Y)) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]true[/b][/color]; } Τον χρησιμοποιείς ως εξής : >[color="#008000"][i]//Esto oti[/i][/color] [color="#2b91af"]PointF[/color] player = [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color]([color="#ff8000"]10.0f[/color], [color="#ff8000"]5.0f[/color]); [color="#2b91af"]PointF[/color] enemy = [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color]([color="#ff8000"]10.0f[/color], [color="#ff8000"]50.0f[/color]); [color="#8000ff"]bool[/color] canShoot = [color="#0000ff"][b]true[/b][/color]; [color="#0000ff"][b]for[/b][/color] ([color="#8000ff"]int[/color] i=[color="#ff8000"]0[/color]; i<walls.Lengh(); i++) [color="#0000ff"][b]if[/b][/color] (IsWallBetween(player, enemy, walls[i])) { canShoot = [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]break[/b][/color]; } [color="#0000ff"][b]if[/b][/color] (canShoot) { [color="#008000"][i]//BANG![/i][/color] } Βέβαια το όλο σκεπτικό βλέπει τον τοίχο ως ένα σημείο, ενώ στην πραγματικότητα ο τοίχος είναι ένα ορθογώνιο. Θα σου στείλω σε λίγο κώδικα για να το ελέγχεις και αυτό. Υ.Γ. η ρουτίνα είναι από το βιβλίο Graphics Gems 1 ---------- Το μήνυμα προστέθηκε στις 18:35 ---------- Όπως σου είπα, ακολουθεί κώδικας για να ελέγχεις αν ένας ορθογώνιος τοίχος είναι ανάμεσα από τον εχθρό και τον παίχτη. Το σκεπτικό είναι ότι ελέγχουμε εάν το ευθύγραμμο τμήμα που σχηματίζουν η θέση του εχθρού και του παίχτη τέμνει κάποια από τις πλευρές του ορθογωνίου του τοίχου. Ακολουθεί ρουτίνα που ελέγχει αν 2 ευθύγραμμα τμήματα τέμνονται : >[color="#8000ff"]bool[/color] SameSigns([color="#8000ff"]float[/color] num1, [color="#8000ff"]float[/color] num2) { [color="#0000ff"][b]return[/b][/color] (num1 < [color="#ff8000"]0[/color] && num2 < [color="#ff8000"]0[/color]) || (num1 >= [color="#ff8000"]0[/color] && num2 >= [color="#ff8000"]0[/color]); } [color="#8000ff"]bool[/color] LinesIntersect([color="#2b91af"]PointF[/color] point1, [color="#2b91af"]PointF[/color] point2, [color="#2b91af"]PointF[/color] point3, [color="#2b91af"]PointF[/color] point4) { [color="#8000ff"]float[/color] a1, a2, b1, b2, c1, c2; [color="#008000"][i]/* Coefficients of line eqns. */[/i][/color] [color="#8000ff"]float[/color] r1, r2, r3, r4; [color="#008000"][i]/* 'Sign' values */[/i][/color] [color="#008000"][i]/* Compute a1, b1, c1, where line joining points 1 and 2 * is "a1 x + b1 y + c1 = 0". */[/i][/color] a1 = point2.Y - point1.Y; b1 = point1.X - point2.X; c1 = point2.X * point1.Y - point1.X * point2.Y; [color="#008000"][i]/* Compute r3 and r4. */[/i][/color] r3 = a1 * point3.X + b1 * point3.Y + c1; r4 = a1 * point4.X + b1 * point4.Y + c1; [color="#008000"][i]/* Check signs of r3 and r4. If both point 3 and point 4 lie on * same side of line 1, the line segments do not intersect. */[/i][/color] [color="#0000ff"][b]if[/b][/color] (r3 != [color="#ff8000"]0[/color] && r4 != [color="#ff8000"]0[/color] && SameSigns(r3, r4)) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; [color="#008000"][i]/* Compute a2, b2, c2 */[/i][/color] a2 = point4.Y - point3.Y; b2 = point3.X - point4.X; c2 = point4.X * point3.Y - point3.X * point4.Y; [color="#008000"][i]/* Compute r1 and r2 */[/i][/color] r1 = a2 * point1.X + b2 * point1.Y + c2; r2 = a2 * point2.X + b2 * point2.Y + c2; [color="#008000"][i]/* Check signs of r1 and r2. If both point 1 and point 2 lie * on same side of second line segment, the line segments do * not intersect. */[/i][/color] [color="#0000ff"][b]if[/b][/color] (r1 != [color="#ff8000"]0[/color] && r2 != [color="#ff8000"]0[/color] && SameSigns(r1, r2)) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]true[/b][/color]; } και το χρησιμοποιείς ως εξής : > [color="#008000"][i]//Esto oti[/i][/color] [color="#2b91af"]PointF[/color] player = [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color]([color="#ff8000"]10.0f[/color], [color="#ff8000"]5.0f[/color]); [color="#2b91af"]PointF[/color] enemy = [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color]([color="#ff8000"]10.0f[/color], [color="#ff8000"]50.0f[/color]); [color="#8000ff"]bool[/color] canShoot = [color="#0000ff"][b]true[/b][/color]; [color="#0000ff"][b]for[/b][/color] ([color="#8000ff"]int[/color] i = [color="#ff8000"]0[/color]; i < walls.Lengh(); i++) [color="#0000ff"][b]if[/b][/color] (LinesIntersect(enemy, player, [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X, walls[i].Y), [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X, walls[i].Y + walls[i].Height)) || [color="#008000"][i]//aristeri pleura[/i][/color] LinesIntersect(enemy, player, [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X + walls[i].Width, walls[i].Y + walls[i].Height), [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X, walls[i].Y + walls[i].Height)) || [color="#008000"][i]//kato pleura[/i][/color] LinesIntersect(enemy, player, [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X + walls[i].Width, walls[i].Y), [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X + walls[i].Width, walls[i].Y + walls[i].Height)) || [color="#008000"][i]//deksia pleura[/i][/color] LinesIntersect(enemy, player, [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X, walls[i].Y), [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]PointF[/color](walls[i].X + walls[i].Width, walls[i].Y))) [color="#008000"][i]//pano pleura[/i][/color] { canShoot = [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]break[/b][/color]; } [color="#0000ff"][b]if[/b][/color] (canShoot) { [color="#008000"][i]//BANG![/i][/color] } Δηλαδή για κάθε τοίχο, ελέγχεις αν κάποια πλευρά τέμνει το ευθύγραμμο τμήμα παίχτη-εχθρού. Αν το τέμνει κάποιο σημαίνει ότι κάποιο εμπόδιο είναι μπροστά. Υ.Γ. και πάλι ο κώδικας είναι από το Graphics Gems II
Alchemist` Δημοσ. 13 Σεπτεμβρίου 2009 Μέλος Δημοσ. 13 Σεπτεμβρίου 2009 Ευχαριστώ πολύ παιδιά για όλα τα μυνήματα... Το πρόβλημα το έλυσα χτες τελικά με την χρήση της συνάρτησης collision_line ... Κράτησα βέβαια τους δικούς σας κώδικες για μελέτη, αλλά όσων αφορά τον κώδικα του kagelou το PointF τι είναι ακριβώς? Y.Γ. δεν γράφω σε C++, (που λογικά είναι η γλώσσα που μου απαντάς) ξέρω μόνο GML και λίγη java... Η engine είναι γραμμένη σε GML. Y.Γ. μετά από αυτό το πρόβλημα και μερικές ακόμα βελτιώσεις, τόσο στην συμπεριφορά όσο και στον τομέα γραφικών που έχουν γίνει φτάνουμε σε λίγο στην έκδοση 0.2, λογικά σε μερικές ώρες θα είναι έτοιμο... Θα φαίνεται εκεί και το Gameplay... Θα κάνω post με νεώτερα... Ευχαριστώ και πάλι πάρα πολύ για το ενδιαφέρον!
kagelos Δημοσ. 13 Σεπτεμβρίου 2009 Δημοσ. 13 Σεπτεμβρίου 2009 Τί είναι η GML? Πρώτη φορά την ακούω. Το PointF είναι απλά ένας τύπος της C# που έχει x & y. Ένα σημείο δηλαδή. Το F εννοεί float, ότι τα χ & y δηλ. είναι δεκαδικοί.
Alchemist` Δημοσ. 13 Σεπτεμβρίου 2009 Μέλος Δημοσ. 13 Σεπτεμβρίου 2009 Τί είναι η GML? Πρώτη φορά την ακούω. Το PointF είναι απλά ένας τύπος της C# που έχει x & y. Ένα σημείο δηλαδή. Το F εννοεί float, ότι τα χ & y δηλ. είναι δεκαδικοί. τώρα το έπιασα ... GML = Game Maker Language. Παρεπιπτώντως ανέβασα την έκδοση 0.2, το έβαλα στο post #1, αν θέλετε ρίξτε μια ματιά, περιμένω οποιεδήποτε γνώμες και ιδέες!!! Ευχαριστώ και πάλι! Υ.Γ. πιάνει μόνο 1273KB
ntinos19 Δημοσ. 13 Σεπτεμβρίου 2009 Δημοσ. 13 Σεπτεμβρίου 2009 έπαιξα λίγο το παιχνίδι, αρκετά διασκεδαστικό θα έλεγα αυτό που είναι λίγο ενοχλητικό(για εμένα τουλάχιστον), είναι όταν ο παίκτης ακουμπάει στο τοίχο τότε πρέπει να αφήσεις το πλήκτρο και να το ξανα πατήσεις για να κουνηθείς, λες και έχει κόλα ενα πράγμα και δεν "γλιστράει" μία ιδέα που είχα είναι να το κάνεις σε επίπεδα, stage 1, 2 κτλ με πόντους όσο μεγαλύτερο είναι το επίπεδο τόσο ποιο δύσκολο να γίνετε και σε κάθε επίπεδο να έχει διαφορετική πίστα κάθε φορά. ίσος με χιόνι που να σε κάνει να πηγαίνεις ποιό αργά κτλ.
Directx Δημοσ. 13 Σεπτεμβρίου 2009 Δημοσ. 13 Σεπτεμβρίου 2009 Ωραία προσπάθεια! Μπράβο! Εγώ θα το έκανα με ένα υψηλής ανάλυσης grid και για το path-finding των εχθρών και πυρών θα βασιζόμουν σε A*. Καλή συνέχεια στην προσπάθεια σας!!
teo64x Δημοσ. 13 Σεπτεμβρίου 2009 Δημοσ. 13 Σεπτεμβρίου 2009 Πολύ ωραία προσπάθεια. Αυτά που θα ήθελα να πω (περί της σαδιστικής collision και της ανάγκης βελτίωσης της AI) τα έχετε ήδη βρει μόνοι σας και τα έχετε βάλει στην to-do list. Άρα, περιμένουμε τις επόμενες βελτιώσεις! Μπράβο σας πάντως.
giorgos147 Δημοσ. 14 Σεπτεμβρίου 2009 Δημοσ. 14 Σεπτεμβρίου 2009 Ωραία δουλειά! Πάντως, ενημερωτικά, εκεί που έπαιζα, μου πέταξε ένα: >ERROR in action number 1 of Collision Event with object reloading_OBJ for object pl_bullet_OBJ: Error in code at line 3: other.hp = other.hp - 10 at position 19: Unknown variable hp
Evgenios1 Δημοσ. 14 Σεπτεμβρίου 2009 Δημοσ. 14 Σεπτεμβρίου 2009 Χε χε καλη φαση,GJ (Good Job). Υγ: Περιεργη γλωσσα
Alchemist` Δημοσ. 11 Νοεμβρίου 2009 Μέλος Δημοσ. 11 Νοεμβρίου 2009 Ευχαριστώ όλους για τα καλά σας λόγια... Φτάσαμε στην επόμενη έκδοση 0.3 ... Περισσότερες πληροφορίες καθώς και το Link για να το δείτε, υπάρχουν στο πρώτο ποστ... Τα κυριοτερα χαρακτηριστηκα αυτής της έκδοσης είναι ότι προσθέθηκαν όπλα τα οποία μπορεί ο παίκτης να επιλέξει με τα 0,1,2...9 (όπως τα κλασσικά fps), εκ των οποίων το καθένα έχει διαφορετική συμπεριφορά και ήχο. Επίσης υποστηρίζονται μεγαλύτερες "πιστες" και χρησιμοποείται μια "κάμερα" που ακολουθεί τις κινήσεις του παίκτη στον χώρο. Έγιναν επίσης και αρκετές μικροβελτιώσεις, ιδιαίτερα στο θέμα των collisions... Y.Γ. δυστηχώς δεν ασχοληθήκαμε καθόλου με το Α.Ι. Υ.Γ.2. γτ δεν μπορώ να αλλάξω τον τίτλο του θέματος??? efefeC...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.