Etusivu | Pong | Omenasoturi
Jypeli-ohjeita
Olion pyörittäminen annetun pisteen ympäri
Olkoon kiertopiste
se piste, jonka ympäri oliota kierretään. Sitten vähän matikkaa.
PhysicsObject olio = new PhysicsObject(200,20);
Add(olio); olio.IgnoresPhysicsLogics = true;
Vector kiertopiste = olio.Position - new Vector(olio.Width / 2, 0);
Keyboard.ListenWSAD(ButtonState.Down, (v) => {
olio.Angle += Angle.FromDegrees(v.X);
double rads = olio.Angle.Radians;
olio.Position = kiertopiste + olio.Width / 2 * new Vector(Math.Cos(rads), Math.Sin(rads));
}, null);
Olion tietyn osan törmäyksen tarkistus
Tehdään lisäämällä pienempi olio törmättävään kohtaan ja päivittämällä sen paikkaa Updatessa esim:
protected override void Update(Time time)
{
paa.Position = hahmo.Position + (hahmo.Angle + Angle.FromDegrees(90)).GetVector() * (hahmo.Height / 2);
base.Update(time);
}
WSAD- ja nuolinäppäinten käyttö nopeasti
ListenWSAD
ja ListenArrows
palauttavat painetun napin suuntaisen yksikkövektorin.
void LisaaOhjaimet()
{
Keyboard.ListenArrows(ButtonState.Down, v => pelaaja.Hit(v * 100), "Liiku");
Keyboard.ListenWSAD(ButtonState.Down, v => pelaaja.Hit(v * 100), "Liiku");
}
Kentän koon kasvattaminen reunoja siirtämällä
Napataan kiinni reunat, jotka CreateBorders
palauttaa ja muutetaan niiden paikkaa ja kokoa samalla kertoimella.
foreach (Surface reuna in Level.CreateBorders())
{
reuna.Size *= 1.5;
reuna.Position *= 1.5;
}
Tai yksinkertaisesti kasvatetaan kentän kokoa ja luodaan reunat sen jälkeen:
Level.Size *= 1.5; Level.CreateBorders();
Ajastimet nopeasti
Timer t = Timer.CreateAndStart(1, Ajasta);
Kahden olion a
ja b
overlappauksen tarkistus
// suorakulmioille
if (a.Left < b.Right && a.Right > b.Left && a.Bottom < b.Top && a.Top > b.Bottom)
// on päällekkäistä aluetta
// ympyröille
if (Vector.Distance(a.Position, b.Position) < a.Width + b.Width)
// on päällekkäistä aluetta
Objektien raahaus hiirellä
PhysicsObject raahattava; // Väliaikaismuuttuja jossa pidetään tieto että mitä kappaletta raahataan hiirellä
public void LuoRaahattava(Vector pos)
{
PhysicsObject p = new PhysicsObject(20, 20);
p.Position = pos;
Add(p);
// Kuunnellaan hiiren klikkausta kappaleen päällä.
// Jos useampi kappale on päällekkäin, niistä viimeisimpänä peliin lisätty on raahauksen kohde
Mouse.ListenOn(p, MouseButton.Left, ButtonState.Pressed, delegate { if (raahattava == null) raahattava = p; }, null );
// Jokaisella pelin päivityksellä (60 kertaa sekunnissa) asetetaan kappale hiiren sijaintiin pelimaailmassa
Mouse.Listen(MouseButton.Left, ButtonState.Down, delegate() { if(raahattava != null) raahattava.Position = Mouse.PositionOnWorld; }, null);
// Kun hiiren napista päästetään irti, "unohdetaan" tieto raahauksen kohteesta
Mouse.ListenOn(p, MouseButton.Left, ButtonState.Released, delegate { raahattava = null; }, null);
}
Pistettä kohti vetävä painovoima
* 1
määrittää painovoimakkuuden.
protected override void Update(Time time)
{
foreach (PhysicsObject p in GetObjectsWithTag("putoava"))
if (p.X != 0 && p.Y != 0) p.Hit(-p.Position * 1);
base.Update(time);
}
```
Pikseliteksti
Tällä koodilla voi tuottaa esim. 8-bit-tyylisiin peleihin teeman mukaista tekstiä (jos Jypelin default-fontti ei nappaa)
Tässä voi testata miltä teksti näyttää.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.