chart.avapose.com |
||
.NET/ASP.NET/C#/VB.NET PDF Document SDKGamePadState GamePad1 = GamePad.GetState(PlayerIndex.One); packetWriter.Write(GamePad1.Triggers.Left); packetWriter.Write(GamePad1.Triggers.Right); packetWriter.Write(GamePad1.ThumbSticks.Left); The method to receive messages is just as simple: you ll loop through the local gamers collection and check if there is any available message. If so, you need to call the ReceiveData method of the LocalNetworkGamer object until you consume all available data. ReceiveData returns arrays of bytes or a packetReader (the counterpart of packetWriter, used to write the packet), and also a NetworkGamer object with data from the remote player, which you can use to test if you want to process the message or not, depending on the game logic. The next code excerpt presents a simple implementation of a routine that consumes messages from other players: PacketReader packetReader = new PacketReader(); public void ReceiveMessage() { NetworkGamer remotePlayer; // The sender of the message foreach (LocalNetworkGamer localPlayer in session.LocalGamers) { // While there is data available for us, keep reading while (localPlayer.IsDataAvailable) { localPlayer.ReceiveData(packetReader, out remotePlayer); // Ignore input from local players if (!remotePlayer.IsLocal) message = "Received message: " + packetReader.ReadString(); } } } The send and receive routines of your game must write and read the same data structures, in the same order. And if you want to read the left thumbstick and both triggers data, you need to write your code for reading packets as follows: remoteThumbstick = packetReader.ReadVector2(); remoteLeftTrigger = packetReader.ReadSingle(); remoteRightTrigger = packetReader.ReadSingle(); winforms pdf 417 reader, winforms qr code reader, winforms upc-a reader, winforms data matrix reader, winforms ean 128 reader, winforms ean 13 reader, itextsharp remove text from pdf c#, replace text in pdf using itextsharp in c#, winforms code 39 reader, itextsharp remove text from pdf c#,final DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); Now you ll start adding the network support to your game. You ll initially create all the network session support for your new game so that later you can send and receive data between the client and the server. Then you ll declare an object for the NetworkHelper class that you created, as well as the constants for the maximum number of local players and for the game session. Add the attributes to the Game1 class: The next block of the implementation creates two new bean definitions for the transport implementation classes. This is metadata about the implementations, not instances of the implementations themselves. We declare that two beans should be available from the factory, we specify the implementation classes that define them, and we specify that they are both singletons (the second parameter of the RootBeanDefinition constructor). Multiple calls to the factory s getBean() method for the bean named smtp will only ever return one instance of the SmtpImpl class: bf.registerBeanDefinition("smtp", new RootBeanDefinition(SmtpImpl.class,true)); bf.registerBeanDefinition("soap", new RootBeanDefinition(SoapImpl.class,true)); We then configure two bean definitions for one implementation class. These are configured similarly but not identically: BeanDefinitionBuilder builder = null; builder = BeanDefinitionBuilder. rootBeanDefinition(LooselyCoupled.class); builder = builder.setSingleton(true); builder = builder.addConstructorArgReference("smtp"); bf.registerBeanDefinition("looseSmtp",builder.getBeanDefinition()); Both are definitions for the LooselyCoupled class, both are defined as singletons, but the constructors are defined as taking different bean definitions for their parameters: builder = BeanDefinitionBuilder. rootBeanDefinition(LooselyCoupled.class); builder = builder.setSingleton(true); builder = builder.addConstructorArgReference("soap"); bf.registerBeanDefinition("looseSoap",builder.getBeanDefinition()); I have chosen my wording carefully here. We have not passed anything to the constructor of the class; we have merely specified the definitions of these beans (looseSmtp and looseSoap) in terms of the named definitions of the earlier smtp and soap beans: CHAPTER 6 ROCK RAIN LIVE! // Network stuff private readonly NetworkHelper networkHelper; private const int maxLocalPlayers = 1; private const int maxSessionPlayers = 2; Then add a reference to the network s support classes: using Microsoft.Xna.Framework.Net; Next, initialize the networkHelper object in the class constructor. Also add it to the game services, because the various classes of your game will use it later on: networkHelper = new NetworkHelper(); Services.AddService(typeof(NetworkHelper), networkHelper); You can use this class now. First, create the method that creates the network game session. This method is called when the user selects the corresponding option in the network scene: /// <summary> /// Create a session for a game server /// </summary> private void CreateSession() { networkHelper.NetworkGameSession = NetworkSession.Create( NetworkSessionType.SystemLink, maxLocalPlayers, maxSessionPlayers); HookSessionEvents(); networkScene.State = NetworkScene.NetworkGameState.creating; networkScene.Message = "Waiting for another player..."; } final LooselyCoupled lc1 = (LooselyCoupled)bf.getBean("looseSmtp"); lc1.sendMessage(); // ... final LooselyCoupled lc2 = (LooselyCoupled)bf.getBean("looseSoap"); lc2.sendMessage(); Only when the factory has been fully populated with all of the relevant bean definitions do we use it to materialize actual objects. These are normal Java objects quite indistinguishable from the objects returned from the calls to the new operators in Listing 3-4. Note This Rock Rain version can create games for local network usage, called SystemLink in XNA. The
|