32 using System.Collections.Generic;
33 using System.ComponentModel;
35 #if !XBOX && !WINDOWS_PHONE 36 using System.Runtime.Serialization.Formatters.Binary;
39 using Microsoft.Xna.Framework;
50 #if !XBOX && !WINDOWS_PHONE 58 #if !XBOX && !WINDOWS_PHONE 66 internal List<IGameObject> childObjects = null;
67 private Queue<IGameObject> childObjectsToRemove = null;
71 private bool textureFillsShape =
false;
72 private bool isAddedToGame =
false;
83 public IEnumerable<IGameObject>
Objects 85 get { InitializeObjectLists();
return childObjects; }
102 if ( value.X < 0.0 || value.Y < 0.0 )
103 throw new ArgumentException(
"The size must be positive." );
111 double xFactor = newSize.
X / oldSize.
X;
112 double yFactor = newSize.
Y / oldSize.
Y;
113 if (childObjects != null)
115 foreach (var o
in childObjects)
117 Vector oldChildSize = o.Size;
118 o.Size =
new Vector(oldChildSize.
X * xFactor, oldChildSize.
Y * yFactor);
122 Vector oldChildPosition = o.Position;
123 o.Position =
new Vector(oldChildPosition.
X * xFactor, oldChildPosition.
Y * yFactor);
146 get {
return textureWrapSize; }
147 set { textureWrapSize = value; }
155 get {
return color; }
156 set { color = value; }
171 get {
return textureFillsShape; }
172 set { textureFillsShape = value; }
180 get {
return shape; }
181 set { shape = value; }
187 internal string ShapeString
189 get {
return Shape.GetType().Name; }
197 [Obsolete(
"Käytä Game.Instance ja IsAddedToGame")]
208 get {
return isAddedToGame; }
211 isAddedToGame = value;
212 if ( childObjects != null )
214 foreach ( var o
in childObjects )
215 o.IsAddedToGame = value;
223 [Obsolete(
"Käytä mieluummin Arrived-tapahtumaa (ottaa parametriksi IGameObject pelkän GameObjectin sijaan)")]
230 [Obsolete(
"Käytä mieluummin Arrived-tapahtumaa (ottaa parametriksi IGameObject pelkän GameObjectin sijaan)" )]
233 if ( ArrivedAt != null )
246 if ( childObjects != null )
298 this.size =
new Vector( width, height );
304 #if !XBOX && !WINDOWS_PHONE 305 public object Clone()
313 MemoryStream ms =
new MemoryStream();
314 BinaryFormatter bf =
new BinaryFormatter();
316 bf.Serialize( ms,
this );
319 object obj = bf.Deserialize( ms );
339 if ( point.
X >= ( p.
X -
Width / 2 )
340 && point.
X <= ( p.
X +
Width / 2 )
342 && point.
Y <= ( p.
Y +
Height / 2 ) )
return true;
353 if ( pointX >= ( pX -
Width / 2 )
354 && pointX <= ( pX +
Width / 2 )
355 && pointY >= ( pY -
Height / 2 )
356 && pointY <= ( pY +
Height / 2 ) )
return true;
359 if ( childObjects == null )
return false;
361 for (
int i = 0; i < childObjects.Count; i++ )
363 if ( childObjects[i].
IsInside( point ) )
return true;
380 InitializeObjectLists();
382 if ( childObjects.Contains( childObject ) )
383 throw new ArgumentException(
"The child object has already been added" );
385 throw new NotImplementedException(
"Having a PhysicsObject as a child object is not supported." );
387 childObjects.Add( childObject );
388 childObject.
Parent =
this;
393 childObjectInt.OnAddedToGame();
405 private void InitializeObjectLists()
407 if ( childObjects == null )
409 childObjects =
new List<IGameObject>();
410 childObjectsToRemove =
new Queue<IGameObject>();
424 childObjectsToRemove.Enqueue( childObject );
433 [EditorBrowsable( EditorBrowsableState.Never )]
438 if (childObjects != null)
445 childObjectsToRemove.Enqueue(child);
449 while (childObjectsToRemove.Count > 0)
489 if ( moveTimer == null )
491 moveTimer =
new Timer();
499 moveTarget = location;
505 if ( !moveTarget.HasValue )
512 double vt = moveSpeed * moveTimer.
Interval;
516 Vector targetLoc = moveTarget.Value;
520 OnArrived( targetLoc );
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Jypelin sisäiset metodit ja propertyt joihin käyttäjän ei tarvitse päästä käsiksi kuuluvat tähän luokkaan...
bool IsAddedToGame
Onko olio lisätty peliin.
double Magnitude
Vektorin pituus.
Angle Angle
Kulma radiaaneina.
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Action Timeout
Tapahtuu väliajoin.
bool IsVisible
Piirretäänkö oliota ruudulle.
virtual void MoveToTarget()
GameObject(double width, double height)
Alustaa uuden peliolion.
object Clone()
Tekee oliosta kopion.
List< Listener > AssociatedListeners
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
TimeSpan MaximumLifetime
Olion suurin mahdollinen elinaika. Kun Lifetime on suurempi kuin tämä, olio kuolee.
Angle AbsoluteAngle
Olion absoluuttinen kulma pelimaailmassa. Jos olio ei ole minkään toisen peliolion lapsiolio...
static Image FromStream(Stream stream)
Lataa kuvan tiedostovirrasta.
bool IsInside(Vector point)
Onko piste p tämän olion sisäpuolella.
bool IsDestroyed
Onko olio tuhottu.
GameObject(Image image)
Alustaa uuden peliolion. Kappaleen koko ja ulkonäkö ladataan parametrina annetusta kuvasta...
bool Enabled
Ajastin päällä/pois päältä.
void Remove(IGameObject childObject)
Poistaa lapsiolion. Jos haluat tuhota olion, kutsu mielummin olion Destroy-metodia.
override Vector Size
Olion koko pelimaailmassa. Kertoo olion äärirajat, ei muotoa.
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
IEnumerable< IGameObject > Objects
Olion lapsioliot. Ei voi muokata.
bool TextureFillsShape
Jos true, kuva piirretään niin, ettei se mene olion muodon ääriviivojen yli. Toisin sanoen kuva piirr...
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true...
override Animation Animation
Animaatio. Voi olla null, jolloin piirretään vain väri.
virtual void Move(Vector movement)
Siirtää oliota.
double ScalarProjection(Vector unitVector)
Peliluokka reaaliaikaisille peleille.
Vector LeftNormal
Vasen normaali.
void Remove(IGameObject childObject)
static readonly Angle Zero
Nollakulma.
Action< GameObject, Vector > ArrivedAt
Tapahtuu, kun on saavuttu haluttuun paikkaan (MoveTo-metodi)
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
void OnArrivedAt(Vector location)
Kutsutaan, kun on saavuttu haluttuun paikkaan (MoveTo-metodi)
Vector TextureWrapSize
Määrittää kuinka moneen kertaan kuva piirretään. Esimerkiksi (3.0, 2.0) piirtää kuvan 3 kertaa vaakas...
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
override void Destroy()
Tuhoaa olion. Tuhottu olio poistuu pelistä.
Yhteinen rajapinta kaikille peliolioille.
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
GameObject(double width, double height, Shape shape)
Alustaa uuden peliolion.
void Add(IGameObject childObject)
Lisää annetun peliolion tämän olion lapseksi. Lapsiolio liikkuu tämän olion mukana, ja sen paikka ja koko ilmaistaan suhteessa tähän olioon.
void Start()
Käynnistää ajastimen.
double Width
Olion leveys (X-suunnassa, leveimmässä kohdassa).
virtual void Update(Time time)
Peliolion päivitys. Tätä kutsutaan, kun IsUpdated-ominaisuuden arvoksi on asetettu true ja olio on li...
static Shape FromString(string shapeStr)
Luo muodon merkkijonosta, esim. "Circle"
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
Vector AbsolutePosition
Olion absoluuttinen paikka pelimaailmassa. Jos olio ei ole minkään toisen peliolion lapsiolio...
static readonly Color White
Valkoinen.
virtual Vector Position
Olion paikka. Jos olio on jonkun toisen peliolion lapsi, paikka on suhteessa tämän vanhempaan (Parent...
void SetImage(StorageFile file)
Lataa kuvan tiedostosta ja asettaa sen oliolle.
virtual void MoveTo(Vector location, double speed)
Yrittää siirtyä annettuun paikkaan annetulla nopeudella. Laukaisee tapahtuman ArrivedAt, kun paikkaan on päästy.
double Height
Olion korkeus (Y-suunnassa, korkeimmassa kohdassa).