XNA C#代码问题

如何解决XNA C#代码问题

| 这是我绘制平视显示器的班级:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace Sleyser1
{

public class Hud
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

    Texture2D tempHUD;
    Rectangle viewportRect;

    SpriteFont HUD;
    Vector2 FontPos;
    Vector2 FontPos2;

    public void Hud()
    {
        HUD = Content.Load<SpriteFont>(\"HUD\");
        FontPos = new Vector2(40,20);
        FontPos2 = new Vector2(150,20);

        spriteBatch.Begin(SpriteSortMode.Deferred,BlendState.AlphaBlend,null,null);

        spriteBatch.Draw(tempHUD,viewportRect,Color.White);

        string output = \"Health:\";
        string output2 = \"Magic:\";
        Vector2 FontOrigin = HUD.MeasureString(output) / 2;
        spriteBatch.DrawString(HUD,output,FontPos,Color.Red,FontOrigin,1.0f,SpriteEffects.None,0.5f);
        spriteBatch.DrawString(HUD,output2,FontPos2,Color.Blue,0.5f);

        spriteBatch.End();

    }
}
}
因此,我如何从这里调用它以便绘制。
    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);


        base.Draw(gameTime);
    }
我要问的问题是如何从方法中调用类?     

解决方法

        
public void Hud()
实际上是类的构造函数,它不应该负责绘制(尤其是因为您多次绘制同一个类,并且构造函数的目的是...构造一个类) 因此,第一步是删除它:
spriteBatch.Begin(SpriteSortMode.Deferred,BlendState.AlphaBlend,null,null);

spriteBatch.Draw(tempHUD,viewportRect,Color.White);

string output = \"Health:\";
string output2 = \"Magic:\";
Vector2 FontOrigin = HUD.MeasureString(output) / 2;
spriteBatch.DrawString(HUD,output,FontPos,Color.Red,FontOrigin,1.0f,SpriteEffects.None,0.5f);
spriteBatch.DrawString(HUD,output2,FontPos2,Color.Blue,0.5f);

spriteBatch.End();
从构造函数中添加到一个新的类方法中,例如Draw()。 更新: XNA提供了Game类,它似乎是应用程序的主要类。它应该包含对您的类的对象的引用。
spritebatch
也是Game类的成员,因此应将其作为参数传递给HUD的Draw函数。然后,您需要做的就是从Game的Draw方法中调用HUD的Draw方法(从游戏对象可以访问的HUD对象)。     ,        在这里同意其他答案,但我会再讲一遍。 将您的Hud类变成一个组件,特别是一个实现
DrawableGameComponent
的组件。这样,您可以将所有Hud逻辑封装在一个位置,并且顾名思义,该组件可以绘制自身。 因此,步骤:- 在您的LoadContent方法中,添加以下代码:- Services.AddService(typeof(SpriteBatch),spriteBatch); 在Visual Studio 2010中创建一个新的游戏组件 更改您的组件继承的类。首先,它是
GameComponent
。改成
DrawableGameComponent
覆盖
LoadContent
方法。虽然您在示例中并未专门加载任何其他内容,但是您可能希望稍后再添加Hud特定的内容。 重写Update方法。 Hud的任何状态更改(即更改健康或魔法值)都应在此处进行。 重写Draw方法。任何有关绘图的内容都应放在此处。请注意,您可以通过在此重写的方法中包含以下代码来获取主SpriteBatch服务(早于声明)的句柄:
SpriteBatch spriteBatch =
        Game.Services.GetService(typeof(SpriteBatch)) as SpriteBatch;
最后,在游戏类的initialize方法中,添加以下代码:- Components.Add(新的HudComponent(this)); 您的组件现在将成为游戏主循环的一部分。     ,        制作一个抽象类,例如
GameElement
,其中包含方法
Update
Draw
。 然后创建GameElement
List<GameElement> Elements
的(静态)列表。 使您的类HUD继承GameElement并实现方法Update(基于游戏时间更新逻辑)和Draw(将游戏元素绘制到表面)。创建HUD时,将其添加到列表
Elements
在主Draw方法中,调用ѭ15。 这样,您就可以处理HUD和任何其他游戏元素(场景,播放器等)的绘制和更新,而无需更改主绘制和更新循环。 您甚至可以将GameElement设置为IGameElement接口,以使您不仅限于继承GameElement类。     ,        您不能调用创建类实例的类。
Classname class = new Classname();
class.method();
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res