Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 31.05.2012, 15:45   #1
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Вопросы по XNA.

Вопросов скапливается немерено, поэтому решил отписываться здесь. Просьба не кидаться помидорами, ведь я только учусь.
Как изменить x и y в Vector2?
То есть у меня есть:
Vector2 player_position=new Vector2(100,100)
И как мне изменить координаты этого вектора?
Кстати, почему это называется вектором? Ведь тут нету направления, а значит это скаляр.
UPD: Всё, разобрался.
            if (Keyboard.GetState().IsKeyDown(Keys.W))
                player_position.Y -=  5;

            if (Keyboard.GetState().IsKeyDown(Keys.S))
                player_position.Y += 5;
            
            if (Keyboard.GetState().IsKeyDown(Keys.A))
                player_position.X -= 5;

            if (Keyboard.GetState().IsKeyDown(Keys.D))
                player_position.X += 5;
Быдло код?



И ещё. Как следует работать со временем? Есть ли аналог MilliSecs()?
(Offline)
 
Ответить с цитированием
Старый 31.05.2012, 16:34   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы по XNA.

Сообщение от Nikich Посмотреть сообщение
            if (Keyboard.GetState().IsKeyDown(Keys.W))
                player_position.Y -=  5;

            if (Keyboard.GetState().IsKeyDown(Keys.S))
                player_position.Y += 5;
            
            if (Keyboard.GetState().IsKeyDown(Keys.A))
                player_position.X -= 5;

            if (Keyboard.GetState().IsKeyDown(Keys.D))
                player_position.X += 5;
Быдло код?
Думаю надо примерно так:
var kbState Keyboard.GetState();    
if (
kbState.IsKeyDown(Keys.W))
      
player_position.-=  5;

if (
kbState.IsKeyDown(Keys.S))
      
player_position.+= 5;
            
if (
kbState.IsKeyDown(Keys.A))
      
player_position.-= 5;

if (
kbState.IsKeyDown(Keys.D))
     
player_position.+= 5

Сообщение от Nikich Посмотреть сообщение
И ещё. Как следует работать со временем? Есть ли аналог MilliSecs()?
Там же есть TimeSpan
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (31.05.2012)
Старый 31.05.2012, 16:39   #3
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопросы по XNA.

Спасибо. Только что значит var? В паскале так начинался блок с переменными, но вряд ли это как-то связано с паскалем.
(Offline)
 
Ответить с цитированием
Старый 31.05.2012, 16:40   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы по XNA.

Что такое var
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (31.05.2012)
Старый 31.05.2012, 19:13   #5
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вопросы по XNA.

Вектор обычно выражается в двух числах, и чаще всего подразумевает что первая точка находиться в 0,0.
Есть нормализованный вектор, когда длина между 0,0 и указанными x,y равна 1.0, в данном случае это не нормализованный вектор, и по сути из этих двух чисел ты можешь получить длину вектора и его направление.

Используй официальную документацию, она может быть очень полезной и само-достаточной.
http://msdn.microsoft.com/en-us/libr...2_members.aspx

Чтобы получить X или Y, просто пиши:
player_position.X;
Да и я любитель придраться, но так по мне читабельнее так:
Vector2 playerPosition = new Vector2(100, 100)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (31.05.2012)
Старый 31.05.2012, 23:03   #6
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Вопросы по XNA.

А какой из этих вариантов читабельнее?
PlayerPosition(playerPosition, playerPosition + enemyPosition, playerPosition * enemyPosition - lolPosition)
PlayerPosition(player_position, player_position + enemy_position, player_position * enemy_position - lol_position)
(Offline)
 
Ответить с цитированием
Старый 31.05.2012, 23:06   #7
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопросы по XNA.

Спасибо. А нет ли у кого примеров по XNA? Просто я не знаю, на что он вообще способен В принципе и функционал в БлитцМаксе нормальный был, но мне не кажется что это действительно максимум в 2D. Кстати, может ли кто-нибудь назвать то, чего нельзя сделать на чистом(!) Максе, но можно на XNA?
(Offline)
 
Ответить с цитированием
Старый 01.06.2012, 00:05   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы по XNA.

XNA это графическое АПИ (альтернатива DirectX). Можно все, на что способна видеокарта - шейдеры и т.п. И это не только 2d.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dream (01.06.2012)
Старый 01.06.2012, 13:15   #9
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Вопросы по XNA.

в инете куча туториалов с XNA. а на ютубе много роликов в которых показывают его возможности
(Offline)
 
Ответить с цитированием
Старый 01.06.2012, 13:29   #10
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопросы по XNA.

http://create.msdn.com/en-US/educati...etting_started
Пока что лучшее из того, что видел. Всё очень понятно, а главное показывают не только функционал XNA, а также и с самим шарпом знакомят.
(Offline)
 
Ответить с цитированием
Старый 01.06.2012, 21:09   #11
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопросы по XNA.

Гм.
Решил провести тест на производительность. Выяснилось, что Макс быстрее XNA. Это я быдло-кодер на C#(хотя конечно я быдло-кодер, но до такой ли степени?), или это действительно так?
(Offline)
 
Ответить с цитированием
Старый 01.06.2012, 21:10   #12
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вопросы по XNA.

Тест в студию.
Сравнивать столь разные инструменты использующие разные GAPI немного не разумно, ну да ладно..
(Offline)
 
Ответить с цитированием
Старый 01.06.2012, 21:15   #13
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопросы по XNA.

XNA
BlitzMax
Сейчас проверю на большем количестве картинок.
Могу кинуть код, если нужно.
З.Ы. В XNA пока не знаю аналога DesktopWidth\DesktopHeight, поэтому разрешение 1280 на 1024.
(Offline)
 
Ответить с цитированием
Старый 01.06.2012, 21:26   #14
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Вопросы по XNA.

Не корректно выразился, я имел ввиду не сам ехе теста, а его описание (что тестируешь) и исходники.
Не тестируй тупо вывод картинок - это ничего не показывает.
Также реально готовый проект на обоих будет конкретно отличаться по многим аспектам.
Короче говоря, ты сравниваешь BMW с AUDI, разные вещи хоть и имеют по 4 колеса.
(Offline)
 
Ответить с цитированием
Старый 01.06.2012, 21:37   #15
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Вопросы по XNA.

Чем больше картинок, тем хуже.
Кидаю код.
Max:

Global R1=DesktopWidth()
Global R2=DesktopHeight()
Graphics R1,R2,32
Global lfps,tfps,fps
Global pic=LoadImage("01.jpg")
Global pic_x,pic_y

Function Update_pic()
If KeyDown(KEY_W) pic_y=pic_y-1
If KeyDown(KEY_S) pic_y=pic_y+1
If KeyDown(KEY_D) pic_x=pic_x+1
If KeyDown(KEY_A) pic_x=pic_x-1
DrawText pic_x+"     "+pic_y,0,24
For i=0 To 10
For i1=0 To 10
DrawImage pic,pic_x+256*i,pic_y+256*i1
Next
Next
End Function

Function Update_fps()
lfps=lfps+1
If MilliSecs()-tfps>1000
 tfps=MilliSecs()
 fps=lfps
 lfps=0
EndIf
DrawText fps,0,0
End Function

While Not KeyHit(KEY_ESCAPE)
Cls
Update_pic()
Update_fps()
Flip(0)
Wend

XNA:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace 
WindowsGame1
{
    
/// <summary>
    /// This is the main type for your game
    /// </summary>
    
public class Game1 Microsoft.Xna.Framework.Game
    
{
        
GraphicsDeviceManager graphics;
        
        
SpriteBatch spriteBatch;

        public 
Game1()
        {
            
graphics = new GraphicsDeviceManager(this);
            

            
graphics.IsFullScreen true;
            
IsFixedTimeStep false;
            
graphics.SynchronizeWithVerticalRetrace false;
            
graphics.PreferredBackBufferHeight 1280;
            
graphics.PreferredBackBufferWidth 1024;
            
Content.RootDirectory "Content";
        }

        
/// <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>
        /// 
        
Texture2D backgroundTexture;
        
SpriteBatch sprites;
        
Vector2 player_position = new Vector2(100100);
        
SpriteFont Font1;
        
        

        
double elapsedTime;
        
int fps;
        
int l_fps;

        protected 
override void Initialize()
        {

            
            
sprites = new SpriteBatch(graphics.GraphicsDevice);
            

            
// TODO: Add your initialization logic here
            

            
base.Initialize();
        }

        
/// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        
protected override void LoadContent()
        {
            
// Create a new SpriteBatch, which can be used to draw textures.
            
spriteBatch = new SpriteBatch(GraphicsDevice);
            
            
// TODO: use this.Content to load your game content here
            
Font1 Content.Load<SpriteFont>("arial");
            
backgroundTexture Content.Load<Texture2D>("Gert");
        }

        
/// <summary>
        /// UnloadContent will be called once per game and is the place to unload
        /// all content.
        /// </summary>
        
protected override void UnloadContent()
        {
            
// TODO: Unload any non ContentManager content here
        
}

        
/// <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();

            if (
Keyboard.GetState().IsKeyDown(Keys.Escape))
                
this.Exit();

            if (
Keyboard.GetState().IsKeyDown(Keys.W))
                
player_position.-=  1;

            if (
Keyboard.GetState().IsKeyDown(Keys.S))
                
player_position.+= 1;
            
            if (
Keyboard.GetState().IsKeyDown(Keys.A))
                
player_position.-= 1;

            if (
Keyboard.GetState().IsKeyDown(Keys.D))
                
player_position.+= 1;
      
            
elapsedTime+=gameTime.ElapsedGameTime.TotalMilliseconds;
            
l_fps++;

            if (
elapsedTime >= 1000)
            {
                
fps l_fps;
                
l_fps 0;
                
elapsedTime 0;
            }

                
// 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)
        {
            
GraphicsDevice.Clear(Color.Black);
            
            
sprites.Begin();
            
            for (
int i=0i<11 i++)
            {
                for (
int i1 0i1 11i1++)
                {
                    
sprites.Draw(backgroundTexture, new Vector2(player_position.256player_position.i1 256), Color.White);
                }
            }
            
sprites.DrawString(Font1Convert.ToString(player_position.X) + " " Convert.ToString(player_position.Y), Vector2.ZeroColor.White);
            
sprites.DrawString(Font1Convert.ToString(fps), new Vector2(024), Color.White);
            
sprites.End();
                
            
// TODO: Add your drawing code here

            
base.Draw(gameTime);
        }
    }


Результаты этого теста:
Max - 2160
XNA - 1816
Не знаю почему, но меня это вообще в шок повергло. А с чем именно это связано? XNA использует DirectX, Max вроде бы тоже.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:11.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com