using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
namespace Terrain
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
GraphicsDevice device;
ContentManager content;
VertexPositionColor[] vertices;
Effect effect;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
content = new ContentManager(Services);
}
private void SetUpVertices()
{
vertices = new VertexPositionColor[3];
vertices[0].Position = new Vector3(-0.5f, -0.5f, 0f);
vertices[1].Position = new Vector3(0, 0.5f, 0);
vertices[2].Position = new Vector3(0.5f, -0.5f, 0f);
}
private void SetUpXNADevice()
{
device = graphics.GraphicsDevice;
graphics.PreferredBackBufferWidth = 600;
graphics.PreferredBackBufferHeight = 480;
graphics.IsFullScreen = false;
graphics.ApplyChanges();
Window.Title = "Terrain";
CompiledEffect compiledEffect = Effect.CompileEffectFromFile(
@"C:\Documents and Settings\family\My Documents\Visual Studio 2005\Projects\Terrain\effects.fx",
null,
null,
CompilerOptions.None,
TargetPlatform.Windows);
effect = new Effect(
graphics.GraphicsDevice,
compiledEffect.GetEffectCode(),
CompilerOptions.None,
null);
}
/// <summary>
/// Allows the game to perform any initialization it needs to before starting to run.
/// This is where it can query for any required services and load any non-graphic
/// related content. Calling base.Initialize will enumerate through any components
/// and initialize them as well.
/// </summary>
protected override void Initialize()
{
// TODO: Add your initialization logic here
SetUpXNADevice();
SetUpVertices();
base.Initialize();
}
/// <summary>
/// Load your graphics content. If loadAllContent is true, you should
/// load content from both ResourceManagementMode pools. Otherwise, just
/// load ResourceManagementMode.Manual content.
/// </summary>
/// <param name="loadAllContent">Which type of content to load.</param>
protected override void LoadGraphicsContent(bool loadAllContent)
{
if (loadAllContent)
{
// TODO: Load any ResourceManagementMode.Automatic content
}
// TODO: Load any ResourceManagementMode.Manual content
}
/// <summary>
/// Unload your graphics content. If unloadAllContent is true, you should
/// unload content from both ResourceManagementMode pools. Otherwise, just
/// unload ResourceManagementMode.Manual content. Manual content will get
/// Disposed by the GraphicsDevice during a Reset.
/// </summary>
/// <param name="unloadAllContent">Which type of content to unload.</param>
protected override void UnloadGraphicsContent(bool unloadAllContent)
{
if (unloadAllContent)
{
// TODO: Unload any ResourceManagementMode.Automatic content
content.Unload();
}
// TODO: Unload any ResourceManagementMode.Manual content
}
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
//if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
// this.Exit();
// TODO: Add your update logic here
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
device.Clear(Color.DarkSlateBlue);
effect.CurrentTechnique = effect.Techniques("Pretransformed");
effect.Begin();
device.VertexDeclaration = new VertexDeclaration(device, VertexPositionColor.VertexElements);
device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1);
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Begin();
pass.End();
}
effect.End();
base.Draw(gameTime);
}
}
}
Problem With XNA
Using Riemer's tutorials, I'm working on triangles and vertex buffers, and I'm getting the error: "Microsoft.Xna.Framework.Graphics.Effect.Techniques' is a 'property' but is used like a 'method'" when I run this code:
It worked fine before I added the bit about vertex buffers, but I can't figure out why it's not working now.
It's because you have effect.Techniques("...") with ()'s instead of effect.Techniques["..."] with []'s. Switch and you should be all set.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement