当前位置: 首页 > 知识库问答 >
问题:

纹理出现在侧面

赫连琦
2023-03-14

我正在尝试使用类来构建小行星类型的翻拍,我在这里有一个制作飞船的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace AsteroidsTest {
    class Character {
        KeyboardState inputKeyboard;
        Texture2D texture;
        Rectangle rectangle;
        Vector2 position;
        Vector2 origin;
        Vector2 speed;
        const float tangentialVelocity = 5f;
        public float rotation;

        public Character(Texture2D newTexture, int positionX, int positionY) {
            texture = newTexture;
            position = new Vector2(positionX, positionY);

    }
    public void Update(GameTime gametime, Keys KeyUp, Keys KeyRight, Keys KeyLeft) {
        inputKeyboard = Keyboard.GetState();
        rectangle = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height);
        position += speed;
        origin = new Vector2(rectangle.Width / 2, rectangle.Height / 2);
        if (inputKeyboard.IsKeyDown(KeyRight)) {
            rotation += 0.1f;
        } 
        else if (inputKeyboard.IsKeyDown(KeyLeft)) {
            rotation -= 0.1f;
        }
        if (inputKeyboard.IsKeyDown(KeyUp)) {
            speed.X = (float)Math.Cos(rotation) * tangentialVelocity;
            speed.Y = (float)Math.Sin(rotation) * tangentialVelocity;
        } else if (speed != Vector2.Zero) {
            speed = Vector2.Zero;
        }
    }
        public void Draw(SpriteBatch spriteBatch) {
                spriteBatch.Draw(texture, position, null, Color.White, rotation, origin, 1.0f, SpriteEffects.None, 0);
    }
}

}

但是当它使用我的主类绘制时,精灵上的纹理是正常绘制的,但是当我按下w向前移动时,它会将我移动到右边。当我旋转它的时候,好像我的船的顶部在一边,这怎么可能呢?

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 AsteroidsTest {
    public class Asteroids : Microsoft.Xna.Framework.Game {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Character Ship;
        Texture2D playerTexture;


        public Asteroids() {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }
        protected override void Initialize() {


                base.Initialize();
        }

        protected override void LoadContent() {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            playerTexture = Content.Load<Texture2D>("Actors//Ship");
            Ship = new Character(playerTexture, 16, 16); 
        }


        protected override void UnloadContent() {

        }


        protected override void Update(GameTime gameTime) {

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

            Ship.Update(gameTime, Keys.Up, Keys.Right, Keys.Left);
            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime) {
            GraphicsDevice.Clear(Color.Black);
            spriteBatch.Begin();
            Ship.Draw(spriteBatch);
            spriteBatch.End();
            base.Draw(gameTime);
        }
    }
}

编辑:似乎只是旋转图像90度顺时针固定它,但不幸的是,它默认为该角度。

共有1个答案

杨鸿畅
2023-03-14

我想它是按预期工作的-默认情况下(0旋转)意味着对象向右看,而不是向上看(相对于显示器/屏幕)。

 类似资料:
  • 我有一个简单的平原(正方形),上面有灯光和材料,我想在上面放一个地球纹理。但是什么都没有出现。我检查过,认为它正确加载了RGB数据,所以我的猜测是这一行有问题(数据是*char,图像是BMP24) 这是一个例子。bmp加载功能: 以下是主要和显示功能: 我玩过代码,有时(当我使用int而不是char*时)我会得到一个红色的材料覆盖所有内容,但不知道到底是什么导致了它 更新:必须更改几行才能正常工作

  • 我有一个简单的场景,包括一个带有月亮漫反射和凹凸纹理的球体模型,烘焙到一个“.GLTF”文件中我使用GLTFJSX导入了模型,但只显示了模型。我打开了灯,但这似乎并没有解决问题。我把同样的模型放在另一个场景中,纹理加载得很好。 问题沙箱:https://codesandbox.io/s/patient-framework-3holn?file=/src/App.js

  • 译注 注意,由于作者对教程做出了更新,之前本节使用的是SOIL库,但现在改为了使用stb_image.h库,关于SOIL配置的部分现在已经被修改,但我仍决定将这部分教程保留起来,放到一个历史存档中,如果有需要的话可以到这里来查看。 我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会

  • 将图片加载后创建纹理对象,纹理将直接用于绘制 createTextures(object) 纹理异步加载,批量异步加载接口 手Q版本:7.8.0 函数参数object属性: 属性名 类型 是否必填 说明 file Array 是 要加载的图片文件数组 success Function 否 接口调用成功回调 fail Function 否 接口调用失败回调 complete Function 否 接

  • 我正在尝试同时渲染背景和我的角色动画和我的角色工具。这件事看起来很琐碎,但我还是搞不懂。这里是我现在为我的呈现所提供的代码。 现在,当我运行以下代码时(将切换到底部): 这是结果 我就是找不到一个模式,总是一个凌驾于另一个之上。我会非常感激我的失落。谢谢!!

  • 如果我创建一个.png 1024 x 1024的纹理,并在中间画一个124 x 124的圆,它的周围将是空的,它使用的RAM是否与我在124x124空间上画一个124 x 124的圆相同?