Lare
Error 404
- Liittynyt
- 13.11.2016
- Viestejä
- 4 403
Kokeillaanpas, saisiko täällä apua, kun koululle ei hetkeen pääse ohjaukseen.
Eli tarkoituksena on tehdä peli Jypeli-pelimoottorilla. Ongelmana on, että törmäyksen lisäämisen jälkeen peli kaatuu heti ja tulee ilmoitus System.NullReferenceException: 'Colliding object must not be null'. Ennen törmäyksen lisäämistä tuli sama virheilmoitus, kun yritti liikuttaa hahmoa A ja D -näppäimillä.
Eli mitä ihmettä tarkoittaa, kun fysiikkaolio on null ja miten tuon saa korjattua? Fysiikkaolioita on tällä hetkellä kaksi, pommi ja hahmo. Koodi on aivan kesken ja kaikki eivät vielä toimi, mutta olisi kiva saada ohjelma edes kääntymään tässä vaiheessa. Varoituksia tai virheitä Visual Studio ei anna ennen kaatumista.
Eli tarkoituksena on tehdä peli Jypeli-pelimoottorilla. Ongelmana on, että törmäyksen lisäämisen jälkeen peli kaatuu heti ja tulee ilmoitus System.NullReferenceException: 'Colliding object must not be null'. Ennen törmäyksen lisäämistä tuli sama virheilmoitus, kun yritti liikuttaa hahmoa A ja D -näppäimillä.
Eli mitä ihmettä tarkoittaa, kun fysiikkaolio on null ja miten tuon saa korjattua? Fysiikkaolioita on tällä hetkellä kaksi, pommi ja hahmo. Koodi on aivan kesken ja kaikki eivät vielä toimi, mutta olisi kiva saada ohjelma edes kääntymään tässä vaiheessa. Varoituksia tai virheitä Visual Studio ei anna ennen kaatumista.
using System;
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
public class FysiikkaPeli7 : PhysicsGame
{
Vector NopeusVasen = new Vector(200, 0);
Vector NopeusOikea = new Vector(-200, 0);
PhysicsObject hahmo;
PhysicsObject pommi;
PhysicsObject alaReuna;
public override void Begin()
{
AsetaOhjaimet();
LuoKentta();
Kamera();
LuoAikaLaskuri();
int i = 0;
while (i < 10)
{
int sade = RandomGen.NextInt(5, 20);
double x = RandomGen.NextDouble(Level.Left, Level.Right);
double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
PhysicsObject pommi = LuoPommi(x);
Add(pommi);
i++;
}
}
void AsetaOhjaimet()
{
PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.A, ButtonState.Pressed, AsetaNopeus, "Liikuttaa hahmoa vasemmalle", hahmo, NopeusVasen);
Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, "seis", hahmo, Vector.Zero);
Keyboard.Listen(Key.D, ButtonState.Pressed, AsetaNopeus, "Liikuttaa hahmoa oikealle", hahmo, NopeusOikea);
Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, "seis", hahmo, Vector.Zero);
}
void LuoKentta()
{
Surface alaReuna = Surface.CreateBottom(Level);
Add(alaReuna);
Gravity = new Vector(0.0, -700.0);
hahmo = LuoHahmo();
AddCollisionHandler(pommi, alaReuna, CollisionHandler.DestroyObject);
}
PhysicsObject LuoHahmo()
{
PhysicsObject hahmo = new PhysicsObject(40.0, 40.0);
hahmo.X = 0;
hahmo.Y = -378;
hahmo.Shape = Shape.Triangle;
Add(hahmo);
return hahmo;
}
void Kamera()
{
Camera.Zoom(0.9);
}
void AsetaNopeus(PhysicsObject hahmo, Vector nopeus)
{
hahmo.Velocity = nopeus;
}
void LuoAikaLaskuri()
{
Timer aikaLaskuri = new Timer();
aikaLaskuri.Start();
Label aikaNaytto = new Label();
aikaNaytto.TextColor = Color.Red;
aikaNaytto.DecimalPlaces = 1;
aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
aikaNaytto.BorderColor = Color.Red;
aikaNaytto.Color = Color.Gray;
aikaNaytto.X = Screen.Left + 100;
aikaNaytto.Y = Screen.Top - 50;
Add(aikaNaytto);
}
PhysicsObject LuoPommi(double x)
{
PhysicsObject pommi = new PhysicsObject(40, 40);
pommi.Shape = Shape.Circle;
pommi.X = x;
pommi.Y = 300;
pommi.Mass = 200;
Add(pommi);
return pommi;
}
}
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
public class FysiikkaPeli7 : PhysicsGame
{
Vector NopeusVasen = new Vector(200, 0);
Vector NopeusOikea = new Vector(-200, 0);
PhysicsObject hahmo;
PhysicsObject pommi;
PhysicsObject alaReuna;
public override void Begin()
{
AsetaOhjaimet();
LuoKentta();
Kamera();
LuoAikaLaskuri();
int i = 0;
while (i < 10)
{
int sade = RandomGen.NextInt(5, 20);
double x = RandomGen.NextDouble(Level.Left, Level.Right);
double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
PhysicsObject pommi = LuoPommi(x);
Add(pommi);
i++;
}
}
void AsetaOhjaimet()
{
PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.A, ButtonState.Pressed, AsetaNopeus, "Liikuttaa hahmoa vasemmalle", hahmo, NopeusVasen);
Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, "seis", hahmo, Vector.Zero);
Keyboard.Listen(Key.D, ButtonState.Pressed, AsetaNopeus, "Liikuttaa hahmoa oikealle", hahmo, NopeusOikea);
Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, "seis", hahmo, Vector.Zero);
}
void LuoKentta()
{
Surface alaReuna = Surface.CreateBottom(Level);
Add(alaReuna);
Gravity = new Vector(0.0, -700.0);
hahmo = LuoHahmo();
AddCollisionHandler(pommi, alaReuna, CollisionHandler.DestroyObject);
}
PhysicsObject LuoHahmo()
{
PhysicsObject hahmo = new PhysicsObject(40.0, 40.0);
hahmo.X = 0;
hahmo.Y = -378;
hahmo.Shape = Shape.Triangle;
Add(hahmo);
return hahmo;
}
void Kamera()
{
Camera.Zoom(0.9);
}
void AsetaNopeus(PhysicsObject hahmo, Vector nopeus)
{
hahmo.Velocity = nopeus;
}
void LuoAikaLaskuri()
{
Timer aikaLaskuri = new Timer();
aikaLaskuri.Start();
Label aikaNaytto = new Label();
aikaNaytto.TextColor = Color.Red;
aikaNaytto.DecimalPlaces = 1;
aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
aikaNaytto.BorderColor = Color.Red;
aikaNaytto.Color = Color.Gray;
aikaNaytto.X = Screen.Left + 100;
aikaNaytto.Y = Screen.Top - 50;
Add(aikaNaytto);
}
PhysicsObject LuoPommi(double x)
{
PhysicsObject pommi = new PhysicsObject(40, 40);
pommi.Shape = Shape.Circle;
pommi.X = x;
pommi.Y = 300;
pommi.Mass = 200;
Add(pommi);
return pommi;
}
}