Σε αυτό το σύντομο μάθημα θα συνεχίσουμε το προηγούμενο παιχνίδι από εκεί που το αφήσαμε.
Θα το βελτιώσουμε τοποθετώντας τοίχους δεξιά και αριστερά έτσι ώστε ο ήρωας μας να μην πέφτει στο κενό. Επίσης θα αλλάξουμε την θέση της κάθε πλατφόρμας και θα προσθέσουμε μια πλατφόρμα όπου θα κινείτε πάνω κάτω.
 
Όλες οι αλλαγές θα γίνουνε στο αρχείο StarlingDemoGameState.as όπου και το ανοίγουμε αφού πρώτα ανοίξουμε το FlashDevelop .
 
Για αρχή αφαιρούμε στην γραμμή 39 το σχόλιο που είχαμε τοποθετήσει ακυρώνοντας το debug του box2D και ενεργοποιούμε την εντολή box2D.visible = true;
Με αυτό τον τρόπο πετυχαίνουμε το να βλέπουμε για το κάθε αντικείμενο που έχουμε τοποθετήσει στην σκηνή μας ένα χρωματιστό σχήμα.
Μερικά από τα αντικείμενα μπορεί να μην έχουν κάποιο γραφικό στην οθόνη παρόλα αυτά υπάρχουν ως οντότητες.

ΤΙ ΘΑ ΦΤΙΑΞΟΥΜΕ

 

(κάνε κλικ πανω στην πλατφόρμα και χρησιμοποίησε βελάκια και space για να κινηθείς)

 
ΚΑΤΕΒΑΣΤΕ ΑΠΟ ΕΔΩ ΤΑ ΑΡΧΕΙΑ demo.zip (3.2 MB)
 
Στο σημερινό παράδειγμα θα βάλουμε δυο τοίχους όπως είπαμε για να μην πέφτουμε στο κενό. Αυτοί οι τοίχοι λοιπόν δεν θα φαίνονται στο κυρίως παιχνίδι αλλά με ανοιχτό το debug του box2D θα μπορούμε να τους δούμε ως οντότητες με το πράσινο χρώμα.
 
Ας δούμε τις εντολές που θα φτιάξουμε τους τοίχους .
Είναι οι :
    add(new Platform("wall-left", {x:0, y:250, width:20, height:500}));
    add(new Platform("wall-right", {x:700, y:250, width:20, height:500}));

  • Με το add προσθέτουμε όπως και την αλλη φορά τα αντικείμενα μας.
  • Με την εντολή new Platform λέμε στην μηχανή μας οτι αυτό που θα τοποθετήσουμε θα είναι μια πλατφόρμα δηλαδή ένα ακίνητο αντικείμενο.
  • Κατόπιν ακολουθεί το ξεχωριστό όνομα του κάθε ενός απο αυτά.
  • Και τέλος μέσα στις αγκύλες έχουμε τις παραμέτρους :
  • x: που είναι το σημείο τοποθέτηση στον οριζόντιο άξονα.
  • y: το ίδιο για τον κάθετο άξονα.
  • width και height είναι το πλάτος και το ύψος του.

 

Όπως είπαμε δεν έχουμε την παράμετρο view που καθορίζει το γραφικό απεικόνισης διότι δεν το θέλουμε.

 
Κάνουμε και μερικές αντίστοιχες μικροαλλαγές στις δύο άλλες πλατφόρμες για να πάνω ποιο ψηλά στην οθόνη μας.
 
add(new Platform("cloud", {x:150, y:150, width:170, view:"../assets/ground.png", oneWay:true}));
            
add(new Platform("cloud2", {x:380, y:180, width:170, view:"../assets/ground.png", oneWay:true}));

 

 
Στην συνέχεια θα βάλουμε μια νέα πλατφόρμα που θα έχει την ικανότητα να ανεβοκατεβαίνει. Αυτό το κάνουμε με την εντολή :
add(new MovingPlatform("cloud3", {x:600, y:350, width:170,    startX:600, startY:440,    endX:600, endY:190, view:"../assets/ground.png", oneWay:true}));

...στην ουσία αυτός το τύπος πλατφόρμας μιάζει με τον προηγούμενο εκτός από το ότι λέγεται MovingPlatform και έχει 4 νέες παραμέτρους τα startX , startY , endX καΙ endY που είναι οι αρχικές και οι τελικές συντεταγμένες της κινούμενης πλατφόρμας !!!
 
Με ολα αυτά τα νούμερα μπορείτε να πειραματιστείτε και να δείτε τις διαφορές που παίρνει το σκηνικό κάθε φορά.
 
Τέλος θα αλλάξουμε την θέση του επάθλου και θα προσθέσουμε ακόμα ένα :
 
           var coin:Coin = new Coin("coin", {x:150, y:50, view:"../assets/jewel.png"});
            add(coin);
            coin.onBeginContact.add(coinTouched);
            
            var coin2:Coin = new Coin("coin2", {x:350, y:100, view:"../assets/jewel.png"});
            add(coin2);
            coin2.onBeginContact.add(coinTouched);
            
Ο ολοληρωμένος κώδικας στο αρχείο StarlingDemoGameState.as
Είναι ο εξής :
 
package demo 
{
	
	import Box2D.Dynamics.Contacts.b2Contact;
	import citrus.objects.platformer.box2d.MovingPlatform;

	import citrus.core.starling.StarlingState;
	import citrus.objects.platformer.box2d.Coin;
	import citrus.objects.platformer.box2d.Enemy;
	import citrus.objects.platformer.box2d.Hero;
	import citrus.objects.platformer.box2d.Platform;
	import citrus.physics.box2d.Box2D;
	import citrus.view.starlingview.AnimationSequence;

	import starling.textures.Texture;
	import starling.textures.TextureAtlas;

	import flash.display.Bitmap;
	
	/**
	 * @author Aymeric
	 */
	public class StarlingDemoGameState extends StarlingState {
		
		[Embed(source="../../assets/embed/Hero.xml", mimeType="application/octet-stream")]
		private var _heroConfig:Class;
		
		[Embed(source="../../assets/embed/Hero.png")]
		private var _heroPng:Class;

		public function StarlingDemoGameState() {
			super();
		}

		override public function initialize():void {
			super.initialize();
			
			var box2D:Box2D = new Box2D("box2D");
			 box2D.visible = true;
			add(box2D);
			
			add(new Platform("bottom", {x:stage.stageWidth / 2, y:stage.stageHeight, width:stage.stageWidth, view:"../assets/grass.png"}));
						
			add(new Platform("cloud", {x:150, y:150, width:170, view:"../assets/ground.png", oneWay:true}));
			
			add(new Platform("cloud2", {x:380, y:180, width:170, view:"../assets/ground.png", oneWay:true}));
			
			add(new MovingPlatform("cloud3", {x:600, y:350, width:170,	startX:600, startY:440,	endX:600, endY:190, view:"../assets/ground.png", oneWay:true}));
			
				add(new Platform("wall-left", {x:0, y:250, width:20, height:500}));
				add(new Platform("wall-right", {x:700, y:250, width:20, height:500}));

			
			
			
			var coin:Coin = new Coin("coin", {x:150, y:50, view:"../assets/jewel.png"});
			add(coin);
			coin.onBeginContact.add(coinTouched);
			
			var coin2:Coin = new Coin("coin2", {x:350, y:100, view:"../assets/jewel.png"});
			add(coin2);
			coin2.onBeginContact.add(coinTouched);
			
			
			var bitmap:Bitmap = new _heroPng();
			var texture:Texture = Texture.fromBitmap(bitmap);
			var xml:XML = XML(new _heroConfig());
			var sTextureAtlas:TextureAtlas = new TextureAtlas(texture, xml);
			
			var hero:Hero = new Hero("hero", {x:100, y:300, width:60, height:135, hurtVelocityX:5, hurtVelocityY:8});
			add(hero);
			hero.view = new AnimationSequence(sTextureAtlas, ["walk", "duck", "idle", "jump", "hurt"], "idle");
			hero.onGiveDamage.add(heroAttack);
			hero.onTakeDamage.add(heroHurt);
			
			var enemy:Enemy = new Enemy("enemy", {x:stage.stageWidth - 50, y:350, width:46, height:68, leftBound:20, rightBound:stage.stageWidth - 20, view:"../assets/MonsterStarlingArt.swf"});
			add(enemy);
		}

		private function heroHurt():void {
			
		}
		
		private function heroAttack():void {
			
		}

		private function coinTouched(contact:b2Contact):void {
			trace('coin touched by an object');
		}

	}

}

 

 
Ακόμα ένα μάθημα έφτασε στο τέλος του . Αυτήν την φορά νομίζω τα πράματα ήταν ποιο εύκολα και ξεκάθαρα .
Στα επόμενα μαθήματα θα προσθέσουμε και άλλες λειτουργίες κάνοντας το παιχνίδι μας περισσότερο ενδιαφέρον!!
 

Joomla SEF URLs by Artio