Ik ben zoals je misschien zag aan voorgaande topics bezig met C#. Op zich gaat dit best redelijk maar ik kom echt van PHP. Nu gebruik ik ook wel OOP met PHP echter merk ik toch nog wat verschillen. Mijn grootste probleem zit hem in de " app life cycle" om het dan maar een mooi naampje te geven
. Ik ben natuurlijk gewent om een bestand te hebben die iets afloopt en thats it.
Nu zit ik dus in C# met een app die in feite altijd blijft lopen en op hele andere manieren ' stopt' en dingen moet doen. Op dit moment zit ik met iets, waarbij zelfs na uitvoerig zoeken ik niets wijzer wordt.
Het gaat hier dus om een windows phone 8 App in C#, hier zit dus een bepaalde ' Application' pagina in als een soort van root.
app.xaml
Hierin zitten zoals je ziet wat lifetime objects in. Deze worden weer opgevangen in de bijbehorende app.xaml.cs
kleine snipit hier;
Goed, alles leuk en wel, maar mijn main app werkt gewoon in een Game.xaml met de bijbehorende game.xaml.cs. Hier laad ik ook wat game data via een settings class
En hier worden ook de event handlers e.d. neer gezet. In feite werkt dit allemaal prima totdat ik iets moet gaan doen met mijn data als een event gebeurt zoals Application_Closing.
Deze data (uit mijn settings class) is geïnitieerd in mijn game. Bepaalde waardes werden uit de localstorage gehaald, en indien iemand speelt zijn deze waardes natuurlijk veranderd. Op het moment van een app_closing moet ik in feite mijn class benaderen om deze data dan weer te setten in de storage.
Het probleem, of het geen wat ik nu niet snap ik het feit dat ik deze data / object / class niet kan benaderen. Simpelweg een nieuwe class aanroepen geeft mij een ander object natuurlijk.
Om het nog kort samen te vatten:
Nu is het de bedoeling dat dit in de App.xaml.cs komt te staan, echter zijn deze events niet(?) toegankelijk binnen mijn Game.xaml , noch game.xaml.cs
De game.xaml gebruikt het volgende
Waar dus die events niet in kunnen, dat is puur in de App.
Ik hoop dat ik enigszins duidelijk ben (waarschijnlijk niet
) maar kan iemand mij wat dingen uitleggen en het liefst wat links geven naar resources zodat ik eens fatsoenlijk kan lezen hoe je dingen goed opzet. Ik heb mij sinds gister al lam gezocht, en ik heb nergens goede guides kunnen vinden. Ik heb zelfs -alle- voorbeelden van de win8 apps gedownload, maar nergens zie ik een reference met wat ik wil.
Het gaat hier ook vooral om het op de juiste manier te doen, ik heb bijvoorbeeld nu al een dodgy manier om bij elke change dit direct in de localstorage te gooien. Mij lijkt het echter niet ' goed' om elke seconden een waarde daarin te gaan gooien.
Nu zit ik dus in C# met een app die in feite altijd blijft lopen en op hele andere manieren ' stopt' en dingen moet doen. Op dit moment zit ik met iets, waarbij zelfs na uitvoerig zoeken ik niets wijzer wordt.
Het gaat hier dus om een windows phone 8 App in C#, hier zit dus een bepaalde ' Application' pagina in als een soort van root.
app.xaml
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <Application x:Class="CookieClicker.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"> <!--Application Resources--> <Application.Resources> <local:LocalizedStrings xmlns:local="clr-namespace:CookieClicker" x:Key="LocalizedStrings"/> </Application.Resources> <Application.ApplicationLifetimeObjects> <!--Required object that handles lifetime events for the application--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated"/> </Application.ApplicationLifetimeObjects> </Application> |
Hierin zitten zoals je ziet wat lifetime objects in. Deze worden weer opgevangen in de bijbehorende app.xaml.cs
kleine snipit hier;
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| public partial class App : Application { public static PhoneApplicationFrame RootFrame { get; private set; } // Code to execute when the application is launching (eg, from Start) // This code will not execute when the application is reactivated private void Application_Launching(object sender, LaunchingEventArgs e) { } // Code to execute when the application is activated (brought to foreground) // This code will not execute when the application is first launched private void Application_Activated(object sender, ActivatedEventArgs e) { } // Code to execute when the application is deactivated (sent to background) // This code will not execute when the application is closing private void Application_Deactivated(object sender, DeactivatedEventArgs e) { } // Code to execute when the application is closing (eg, user hit Back) // This code will not execute when the application is deactivated private void Application_Closing(object sender, ClosingEventArgs e) { } //etc |
Goed, alles leuk en wel, maar mijn main app werkt gewoon in een Game.xaml met de bijbehorende game.xaml.cs. Hier laad ik ook wat game data via een settings class
C#:
1
| private Settings settings = new Settings(); |
En hier worden ook de event handlers e.d. neer gezet. In feite werkt dit allemaal prima totdat ik iets moet gaan doen met mijn data als een event gebeurt zoals Application_Closing.
Deze data (uit mijn settings class) is geïnitieerd in mijn game. Bepaalde waardes werden uit de localstorage gehaald, en indien iemand speelt zijn deze waardes natuurlijk veranderd. Op het moment van een app_closing moet ik in feite mijn class benaderen om deze data dan weer te setten in de storage.
Het probleem, of het geen wat ik nu niet snap ik het feit dat ik deze data / object / class niet kan benaderen. Simpelweg een nieuwe class aanroepen geeft mij een ander object natuurlijk.
Om het nog kort samen te vatten:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public partial class Game : PhoneApplicationPage { private Settings settings = new Settings(); int CookieCount; public Game() { InitializeComponent(); CookieCount = settings.CookieCountSetting; // vervolgens doe ik allerlei dingen met de CookieCount // Om uiteindelijk deze data (CookieCount) op te slaan gooi ik hem weer terug met; settings.CookieCountSetting = CookieCount; |
Nu is het de bedoeling dat dit in de App.xaml.cs komt te staan, echter zijn deze events niet(?) toegankelijk binnen mijn Game.xaml , noch game.xaml.cs
De game.xaml gebruikt het volgende
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <phone:PhoneApplicationPage x:Class="CookieClicker.Game" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> |
Waar dus die events niet in kunnen, dat is puur in de App.
Ik hoop dat ik enigszins duidelijk ben (waarschijnlijk niet
Het gaat hier ook vooral om het op de juiste manier te doen, ik heb bijvoorbeeld nu al een dodgy manier om bij elke change dit direct in de localstorage te gooien. Mij lijkt het echter niet ' goed' om elke seconden een waarde daarin te gaan gooien.