public override void Begin() { lintu = new PyO(40, 20, Shape.Circle); Add(lintu); maa = Level.CreateBottomBorder(); Gravity = new Vector(0, -800); LuoPutket(); AddCollisionHandler(lintu, AloitaAlusta); Keyboard.Listen(Key.Space,BS.Released,Flap,""); Keyboard.Listen(Key.Escape,BS.Released,Exit,""); }
void LuoPutki(double x, double y) { double ht = Screen.Height; PyO putki = new PyO(10, ht); // Painovoima ei vaikuta putki.IgnoresPhysicsLogics = true; putki.CanRotate = false; // Ei törmäile maahan putki.CollisionIgnoreGroup = 1; putki.Position = new Vector(x, y); Add(putki); // Pistä putket tulemaan lintua kohti Vec movePos = new Vec(-ht, y); putki.MoveTo(movePos, 100); }
void AloitaAlusta(PyO lintu, PyO kohde) { ClearAll(); Begin(); }
/// <summary> /// Määrää, mihin aliohjelmaan siirrytään kun /// fysiikkaolio <code>obj</code> törmää fysiikkarakenteeseen, jolla on tietty tagi <code>tag</code>. /// </summary> /// <param name="obj">Törmäävä olio.</param> /// <param name="tag">Törmättävän olion tagi.</param> /// <param name="handler">Metodi, joka käsittelee törmäyksen (ei parametreja).</param> public void AddCollisionHandler(PhysicsObject obj, object tag, CollisionHandler <PhysicsObject, PhysicsStructure> handler) { AddCollisionHandler <PhysicsObject, PhysicsStructure>(obj, tag, handler); }
/// <summary> /// Määrää, mihin aliohjelmaan siirrytään kun fysiikkaolio <code>obj</code> törmää johonkin toiseen fysiikkaolioon. /// </summary> /// <param name="obj">Törmäävä olio</param> /// <param name="handler">Törmäyksen käsittelevä aliohjelma.</param> public void AddCollisionHandler(PhysicsObject obj, CollisionHandler <PhysicsObject, PhysicsObject> handler) { AddCollisionHandler <PhysicsObject, PhysicsObject>(obj, handler); }
/// <summary> /// Heittää kappaleen hahmon rintamasuuntaa kohti. /// </summary> /// <param name="obj">Heitettävä kappale</param> /// <param name="angle">Suhteellinen kulma (0 astetta suoraan, 90 ylös)</param> /// <param name="force">Heiton voimakkuus</param> /// <param name="distOffset">Offset ammuksen etäisyydelle</param> /// <param name="layer">Pelimaailman kerros</param> /// <param name="axialOffset">Offset ammuksen akselin suuntaiselle paikalle</param> public void Throw(PhysicsObject obj, Angle angle, double force, double distOffset = 0, int layer = 0, double axialOffset = 0) { PrepareThrowable(obj, angle, force, distOffset, axialOffset); Game.Add(obj, layer); }
private void PaintPhysicsOutlines(Canvas canvas, PhysicsObject obj) { if (obj.Body == null || obj.Body.Shape == null || obj.Body.Shape.Cache == null) { return; } var vertexes = obj.Body.Shape.Cache.OutlineVertices; double wmul = obj.Body.Shape.IsUnitSize ? obj.Width : 1; double hmul = obj.Body.Shape.IsUnitSize ? obj.Height : 1; canvas.BrushColor = (obj is GameObject && Mouse.IsCursorOn((GameObject)obj)) ? Color.Salmon : Color.DarkRed; Vector3 center = (Vector3)Camera.WorldToScreen(obj.Body.Position, obj.Layer); Matrix transform = Matrix.CreateRotationZ((float)obj.Body.Angle) * Matrix.CreateTranslation(center); for (int j = 0; j < vertexes.Length - 1; j++) { double x1 = wmul * vertexes[j].X; double y1 = hmul * vertexes[j].Y; double x2 = wmul * vertexes[j + 1].X; double y2 = hmul * vertexes[j + 1].Y; var t1 = Vector2.Transform(new Vector2((float)x1, (float)y1), transform); var t2 = Vector2.Transform(new Vector2((float)x2, (float)y2), transform); canvas.DrawLine(t1.X, t1.Y, t2.X, t2.Y); } if (vertexes.Length > 2) { double x1 = wmul * vertexes[vertexes.Length - 1].X; double y1 = hmul * vertexes[vertexes.Length - 1].Y; double x2 = wmul * vertexes[0].X; double y2 = hmul * vertexes[0].Y; var t1 = Vector2.Transform(new Vector2((float)x1, (float)y1), transform); var t2 = Vector2.Transform(new Vector2((float)x2, (float)y2), transform); canvas.DrawLine(t1.X, t1.Y, t2.X, t2.Y); } /*var vertexes = obj.Body.Shape.Cache.OutlineVertices; * var center = Camera.WorldToScreen( obj.Body.Position, obj.Layer ); * double wmul = obj.Body.Shape.IsUnitSize ? obj.Width : 1; * double hmul = obj.Body.Shape.IsUnitSize ? obj.Height : 1; * * canvas.BrushColor = ( obj is GameObject && Mouse.IsCursorOn( (GameObject)obj ) ) ? Color.Salmon : Color.DarkRed; * * for ( int j = 0; j < vertexes.Length - 1; j++ ) * { * double x1 = center.X + wmul * vertexes[j].X; * double y1 = center.Y + hmul * vertexes[j].Y; * double x2 = center.X + wmul * vertexes[j + 1].X; * double y2 = center.Y + hmul * vertexes[j + 1].Y; * * canvas.DrawLine( x1, y1, x2, y2 ); * } * * if ( vertexes.Length > 2 ) * { * double x1 = center.X + wmul * vertexes[vertexes.Length - 1].X; * double y1 = center.Y + hmul * vertexes[vertexes.Length - 1].Y; * double x2 = center.X + wmul * vertexes[0].X; * double y2 = center.Y + hmul * vertexes[0].Y; * * canvas.DrawLine( x1, y1, x2, y2 ); * }*/ }