1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu 3D Game Programming All in One- P9 ppt

30 329 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tài liệu 3D Game Programming All in One- P9 ppt
Trường học University of Science and Technology of Vietnam
Chuyên ngành Game Programming
Thể loại Tài liệu hướng dẫn
Năm xuất bản 2023
Thành phố Hanoi
Định dạng
Số trang 30
Dung lượng 492,12 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

// The following functions are called from the client common code modules.. Error "Attempting to create an angus ghost!" ; }// Create the player object %player = new Player { Chapter 4 ■

Trang 1

function Toggle3rdPPOVLook( %val )// -// Enable the "free look" feature As long as the mapped key is pressed,// the player can view his avatar by moving the mouse around

{

{

// -if (%val){

$firstPerson = !$firstPerson;

}}//============================================================================

// keyboard control mappings//============================================================================

// these ones available when player is in gameplayerKeymap.Bind(keyboard, up, GoAhead);

playerKeymap.Bind(keyboard, down, BackUp);

playerKeymap.Bind(keyboard, left, GoLeft);

playerKeymap.Bind(keyboard, right, GoRight);

playerKeymap.Bind( keyboard, numpad0, DoJump );

playerKeymap.Bind( mouse, xaxis, DoYaw );

playerKeymap.Bind( mouse, yaxis, DoPitch );

playerKeymap.Bind( keyboard, z, Toggle3rdPPOVLook );

playerKeymap.Bind( keyboard, tab, Toggle1stPPOV );

// these ones are always availableGlobalActionMap.BindCmd(keyboard, escape, "", "quit();");

GlobalActionMap.Bind(keyboard, tilde, ToggleConsole);

Client 147

Trang 2

// The following functions are called from the client common code modules

// These stubs are added here to prevent warning messages from cluttering// up the log file

//============================================================================

function onServerMessage(){

}function onMissionDownloadPhase1(){

}function onPhase1Progress(){

}function onPhase1Complete(){

}function onMissionDownloadPhase2(){

}function onPhase2Progress(){

}function onPhase2Complete(){

}function onPhase3Complete(){

}function onMissionDownloadComplete(){

}Right off the bat, a new ActionMap calledplayerKeymap is created This is a structure that holds the mapping of key commands to functions that will be performed—a mechanism

often called key binding, or key mapping We create the new ActionMap with the intent to populate it later in the module.

Then we define the 3D control (TS, or ThreeSpace) we call PlayerInterface (because that's what it is), which will contain our view into the 3D world It's not a complex definition.

It basically uses a profile defined in the common code—something we'll explore in a later chapter If we want to use our mouse to provide view manipulation, we must set thenoCursor property of the control to 1, or true.

Chapter 4 ■ Game Programming 148

Trang 3

Then we define a method for the PlayerInterface control that describes what to do when the control becomes active ("wakes up") It's not much, but what it does is activateDirectInputin order to grab any user inputs at the keyboard or mouse and then make theplayerKeymap bindings active.

Next, we define a callback method for the GameConnection object (you know, the one we created back there in control/main.cs) The engine invokes this method internally when the server has established the connection and is ready to hand control over to us In this method we assign our player interface control to the Canvas we created earlier in theInitializeClient() function in the control/initialize.cs module.

After that, we define a whole raft of motion functions to which we will later bind keys.

Notice that they employ global variables, such as $mvLeftAction This variable and others like it, each of which starts with $mv, are seen and used internally by the engine.

Then there is a list of key bindings Notice that there are several variations of the Bind calls.

First, there are binds to our playerKeymap, which makes sense Then there are binds to theGlobalActionMap; these bindings are available at all times when the program is running, not just when an actual game simulation is under way, which is the case with a normal action map.

Finally, there is a list of stub routines All of these routines are called from within the mon code package We don't need them to do anything yet, but as before, in order to min- imize log file warnings, we create stub routines for the functions.

com-Server

The control/server.cs module is where game-specific server code is located Most of the functionality that is carried in this module is found in the form of methods for the GameConnection class Here is the control/server.cs module Type it in and save it as Emaga4\control\server.cs.

//============================================================================

// control/server.cs//

// server-side game specific module for 3DGPAI1 emaga4 tutorial game// provides client connection management and player/avatar spawning//

// Copyright (c) 2003 by Kenneth C Finney

//============================================================================

function OnServerCreated()// -// Once the engine has fired up the server, this function is called

{

// -Server 149

Trang 4

Exec("./player.cs"); // Load the player datablocks and methods}

//============================================================================// GameConnection Methods

// Extensions to the GameConnection class Here we add some methods// to handle player spawning and creation

//============================================================================function GameConnection::OnClientEnterGame(%this)

// Called when the client has been accepted into the game by the server.// -{

// -// Create a player object

%this.spawnPlayer();

}function GameConnection::SpawnPlayer(%this)// -// This is where we place the player spawn decision code

// It might also call a function that would figure out the spawn// point transforms by looking up spawn markers

// Once we know where the player will spawn, then we create the avatar.// -{

%this.createPlayer("0 0 220 1 0 0 0");

}function GameConnection::CreatePlayer(%this, %spawnPoint)// -// Create the player's avatar object, set it up, and give the player control// of it

{

// -if (%this.player > 0)//The player should NOT already have an avatar object.{ // If he does, that's a Bad Thing

Error( "Attempting to create an angus ghost!" );

}// Create the player object

%player = new Player() {

Chapter 4 ■ Game Programming 150

Trang 5

dataBlock = HumanMaleAvatar; // defined in player.csclient = %this; // the avatar will have a pointer to its}; // owner's connection

// The following functions are called from the server common code modules

// These stubs are added here to prevent warning messages from cluttering// up the log file

//============================================================================

function ClearCenterPrintAll(){

}function ClearBottomPrintAll(){

}The first function,OnServerCreated, manages what happens immediately after the server is

up and running In our case we need the player-avatar datablocks and methods to be loaded up so they can be transmitted to the client.

Then we define some GameConnection methods The first one,OnClientEnterGame, simply calls the SpawnPlayer method, which then calls the CreatePlayer method using the hard- coded transform provided.

CreatePlayer then creates a new player object using the player datablock defined in trol/player.cs (which we will review shortly) It then applies the transform (which we created manually earlier) to the player's avatar and then transfers control to the player.

con-Finally, there are a couple more stub routines That's the end of them—for now—I promise!

Player

The control/player.cs module defines the player datablock and methods for use by this datablock for various things The datablock will use the standard male model, which in this case has been named player.dts Figure 4.3 shows the standard male avatar in the

Player 151

Trang 6

Here is the control/player.cs module Type it in and save it as Emaga4\control\player.cs.// -

// control/player.cs//

// player definition module for 3DGPAI1 emaga4 tutorial game//

// Copyright (c) 2003 by Kenneth C Finney

datablock PlayerData(HumanMaleAvatar)

// -{className = Avatar;

Trang 7

// -function Avatar::onAdd(%this,%obj)

// -{}function Avatar::onRemove(%this, %obj){

if (%obj.client.player == %obj)

%obj.client.player = 0;

}The datablock used is the PlayerData class It is piled to the gunwales with useful stuff.

Table 4.2 provides a summary description of each of the properties.

There are many more properties available for the avatar, which we aren't using right now.

We can also define our own properties for the datablock and access them, through an instance object of this datablock, from anywhere in the scripts.

Last but not least, there are two methods defined for the datablock The two basically define what happens when we add a datablock and when we remove it We will encounter many others in later chapters.

Running Emaga4

Once you've typed in all of the modules, you should be in a good position to test Emaga4.

Emaga4 is a fairly minimalist program When you launch tge.exe, you will be deposited directly into the game Once you have been deposited in the game, you have a small set of keyboard commands available to control your avatar, as shown in Table 4.3.

Running Emaga4 153

Trang 8

Chapter 4 ■ Game Programming 154

Table 4.2 Emaga4 Avatar Properties

className Defines an arbitrary class that the avatar can belong to

shapeFile Specifies the file that contains the 3D model of the avatar

emap Enables environment mapping on the avatar model

renderFirstPerson When true, causes the avatar model to be visible when in first-person

point-of-view mode

cameraMaxDist Maximum distance from the avatar for the camera in third-person

point-of-view mode

mass The mass of the avatar in terms of the game world

density Arbitrarily defined density

drag Slows down the avatar through simulated friction

maxdrag Maximum allowable drag

maxEnergy Maximum energy allowed

maxDamage Maximum damage points that can be sustained before the avatar is killed

maxForwardSpeed Maximum speed allowable when moving forward

maxBackwardSpeed Maximum speed allowable when moving backward

maxSideSpeed Maximum speed allowable when moving sideways (strafing)

minJumpSpeed Below this speed, you can't make the avatar jump

maxJumpSpeed Above this speed, you can't make the avatar jump

jumpForce The force, and therefore the acceleration, when jumping

runForce The force, and therefore the acceleration, when starting to run

runSurfaceAngle Maximum slope (in degrees) that the avatar can run on

jumpSurfaceAngle Maximum slope (in degrees) that the avatar can jump on, usually somewhat

less than runSurfaceAngle

Table 4.3 Emaga4 Navigation Keys

Up Arrow Run forwardDown Arrow Run backwardLeft Arrow Run (strafe) leftRight Arrow Run (strafe) rightNumpad 0 Jump

z Free look (hold key and move mouse)Tab Toggle player point of view

Escape Quit gameTilde Open console

Trang 9

After you have created all

of the modules, you can run Emaga4 simply

by double-clicking on Emaga4\tge.exe You will

"spawn" in to the game world above the ground, and drop down When you hit the ground, your view will shake from the impact If you turn your player around, using the mouse, you will see the view shown in Figure 4.4.

After spawning, you can run around the country- side, admire your avatar with the Tab and z keys, and jump.

Moving Right Along

You should have a fairly simple game now I'll be the first to admit that there is not much

to do within the game, but then that wasn't the point, really By stripping down to a bones code set, we get a clearer picture of what takes place in our script modules.

bare-By typing in the code presented in this chapter, you should have added the following files

in your emaga4 folder:

C:\emaga4\main.cs C:\emaga4\control\main.cs C:\emaga4\control\client.cs C:\emaga4\control\server.cs C:\emaga4\control\initialize.cs C:\emaga4\control\player.cs The program you have will serve as a fine skeleton program upon which you can build

your game in the manner that you want.

By creating it, you've seen how the responsibilities of the client and server portions of the game are divvied out.

Moving Right Along 155

Figure 4.4 Looking around the Emaga4 game world.

Trang 10

You've also learned that your player's avatar needs to have a programmatic representation

in the game that describes the characteristics of the avatar, and how it does things.

In the next chapter we will expand the game by adding game play code on both the client and the server sides.

Chapter 4 ■ Game Programming 156

Trang 11

Game Pl ay

chapter 5

I n Chapter 4 we created a small game, Emaga4 Well, not really a game—more of a

really simple virtual reality simulation We created a few important modules to get the ball rolling.

In this chapter we'll build on that humble beginning and grow toward something with

some game play challenge in it, called Emaga5 There will be some tasks to perform (goals) and some things to make those tasks just that much harder (dramatic tension).

To make this happen we'll have to add a fair number of new control modules, modify some of the existing ones, and reorganize the folder tree somewhat We'll do that in reverse order, starting with the reorganization.

After examining Figure 5.1, take a few moments to run the EmagaCh5KitInstall program.

You will find it in the 3DGPAi1\RESOURCES folder After it does its business, it will have installed everything except the key modules that we're going to explore in detail There is

Trang 12

The new folder tree is the one we will be sticking with for the rest of the book We will be adding a cou- ple more folder nodes for specialized fea- tures in later chap- ters, but otherwise, this is the final form.

Modules

You will not need to type in the root main module again, because

it won't be any ent this time around.

differ-In the control branch, the first major differ- ence is that the initialize.cs module has been split in two, with a client version and a server version Each of the new modules is now located in its respective branches—control/serv- er/ and control/client/ They still perform the same tasks as before, but splitting the initial- ize functions and putting them in their permanent homes prepares us for all our later organizational needs.

There were also the two modules: control/server.cs and control/client.cs We will now expand these and relocate them as control/server/server.cs and control/client/client.cs, respectively.

The final module from Chapter 4 is player.cs We will be expanding it greatly and ing it to control/server/players/player.cs.

relocat-Furthermore, we will add several new modules to handle various functional features of the game We'll address each file as we encounter it in the chapter.

Make sure you have run the EmagaCh5KitInstall program before proceeding, because it creates our folder tree for us.

Trang 13

between the client and server branches The data branch is where our art and other data definition resources reside.

control/main.cs

Type in the following code and save it as the control main module at trol\main.cs In order to save on space, there are fewer source code comments than in the last chapter.

C:\Emaga5\con-// control/main.cs

// -// Copyright (c) 2003 by Kenneth C Finney

Exec("./client/presets.cs");

// -Exec("./server/presets.cs");

package control {function OnStart(){

function OnExit(){

Parent::onExit();

}}; // Client packageActivatePackage(control); // Tell TGE to make the client package activeRight off the bat, we can see some new additions The two Exec statements at the begin-

ning load two files that contain presets These are script variable assignment statements We

make these assignments here to specify standard or default settings Some of the variables

in those files pertain to graphics settings, others specify input modes, and things like that.

Next we have the control package, which has a few minor changes in its OnStart() tion This is where we load the two new initialization modules and then call the initial- ization functions for the server and then the client.

func-Control Modules 159

Trang 14

Client Control Modules

Modules that affect only the client side of the game are contained in the control/client folder tree The client-specific activities deal with functions like the interface screens and displays, user input, and coordinating game start-up with the server side of the game.

control/client/client.cs

Many features that were in client.cs in the last chapter are now found in other modules The key mapping and interface screen code that were located in this module, client.cs, have been given homes of their own, as you'll see later Type in the following code and save

it as C:\Emaga5\control\client\client.cs.

//============================================================================

// control/client/client.cs// Copyright (c) 2003 by Kenneth C Finney

//============================================================================

function LaunchGame(){

// Start up the client with the menu

Canvas.setContent( MenuScreen );

Canvas.setCursor("DefaultCursor");

}function SplashScreenInputCtrl::onInputEvent(%this, %dev, %evt, %make){

if(%make){

ShowMenuScreen();

}}//============================================================================

// stubs//============================================================================

function onServerMessage(){

}

Chapter 5 ■ Game Play 160

Trang 15

function onMissionDownloadPhase1(){

}function onPhase1Progress(){

}function onPhase1Complete(){

}function onMissionDownloadPhase2(){

}function onPhase2Progress(){

}function onPhase2Complete(){

}function onPhase3Complete(){

}function onMissionDownloadComplete(){

}We've added three new functions, the first of which is LaunchGame() The code contained should be familiar from Emaga4 This function is executed when the user clicks on the Start Game button on the front menu screen of the game—the other options available on the front screen are Setup and Quit.

Next is ShowMenuScreen(), which is invoked when the user clicks the mouse or hits a key when sitting viewing the splash screen The code it invokes is also familiar from Emaga4.

The third function,SplashScreenInputCtrl::onInputEvent(), is a callback method used by aGuiInputControl, in this case the SplashScreenInputCtrl, which is attached to the splash screen for the narrow purpose of simply waiting for user input, and when it happens, closing the splash screen We get the user input value in the %make parameter Figure 5.2 shows what the splash screen looks like.

The rest of the functions are the by-now-famous stub routines These are mostly client/server mission (map) loading and coordination functions These will get more attention in later chapters You are free to leave out the stub routines, but if you do, you will end up with a ton of warning messages in the log file.

Client Control Modules 161

Ngày đăng: 21/01/2014, 23:20

TỪ KHÓA LIÊN QUAN