- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 Stack Overflow 的新手,虽然我已经编写了几年的基础和中级 C++ 程序,但我从未能够超越它。我最近通过从 www.planetchili.net 获得的框架了解了如何在 DirectX 中工作。我正在尝试为将演示 AI 和寻路的编程类(class)开发类似于小行星类型的游戏。玩家将不会炸毁小行星,而是与其他三角船作战。
该框架带有一个 Game 对象,我一直通过它来完成我的大部分工作。但是,我意识到我可能应该为 Ship 编写自己的类,其中包含执行 Ship 相关操作所需的变量,例如绘制船舶和跟踪统计数据(如位置和分数)。
但是,我遇到了一个看起来像是 Inception 级悖论的问题。该框架使用称为 D3Dgraphics 的东西,它声明并使用称为 gfx 的 D3D 对象。为了在 Ship 中使用 D3D 绘图功能,我包含了 D3D 库并在 Ship.h 中创建了一个 D3D 对象。
我可以在 Game 中声明和实例化 Ship 对象,但是在游戏中直接使用时可以使用的绘图函数在通过 ship 对象使用时不起作用。我不知道这是为什么,但我相信这可能是因为我编织的这个讨厌的网。反对的 Game 使用一个 D3D 对象,该对象具有一个名为 Go() 的函数,似乎可以绘制和销毁框架,Ship 对象使用 D3D 对象但无法访问 Game 的 Go() 方法,然后 Game 使用 Ship。
这是我的一些代码...请理顺我。
Ship.cpp
//Ship.cpp
#include "Ship.h"
#include <math.h>
enter code here
//Constructor
Ship::Ship(HWND hWnd)
: gfx ( hWnd )
{}
void Ship::drawLine(int x1, int x2, int y1, int y2){
//Draws a line using gfx.putPixel- This function works perfectly if declared and used directly in Game.cpp
}
Ship.h
//Ship.h
#pragma once
#include "D3DGraphics.h"
#include "Keyboard.h"
#include <vector>
class Ship{
private:
D3DGraphics gfx;
public:
Ship::Ship(HWND hWnd); //Default Constructor
};
//Game.h
#pragma once
#include "Ship.h"
#include "D3DGraphics.h"
#include "Keyboard.h"
class Game
{
public:
Game( HWND hWnd,const KeyboardServer& kServer );
void Go();
//Member functions
private:
void ComposeFrame();
private:
D3DGraphics gfx;
KeyboardClient kbd;
Ship psp;
};
//Game.cpp
#include "Game.h"
#include <math.h>
Game::Game( HWND hWnd,const KeyboardServer& kServer )
: gfx ( hWnd ),
psp(hWnd),
kbd( kServer )
{}
void Game::Go()
{
gfx.BeginFrame();
ComposeFrame();
gfx.EndFrame();
}
void Game::ComposeFrame()
{
psp.drawShip();
}
最佳答案
Game
类正在使用的 D3DGraphics
对象在内存中与 Ship
D3DGraphics
不同目的。您必须使用指针来确保您使用的是同一对象,将其更改为以下片段:
class Ship{
private:
D3DGraphics *gfx;
public:
Ship::Ship(D3DGraphics *pGfx); //Default Constructor
};
-
//Constructor
Ship::Ship(D3DGraphics *pGfx)
{
gfx = pGfx;
}
-
Game::Game( HWND hWnd,const KeyboardServer& kServer )
: gfx ( hWnd ),
psp(gfx),
kbd( kServer )
{}
您现在必须在 Ship
类中使用 gfx->
而不是使用 gfx.
。 IE。 gfx->PutPixel()
而不是 gfx.PutPixel()
。
一点旁注,尝试将您的变量名称更改为使用常用匈牙利表示法提供更多信息的名称:http://en.wikipedia.org/wiki/Hungarian_notation
关于c++ - DirectX 新手,自定义类已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15621652/
循环不起作用,我想就是这样,也许 list[i].removeChild(list[i]);我想删除 lt 列表类。 function removeDone () { var lista = do
我正在制作一个java程序,它能够使用他们的api将(主要是mp4)文件上传到主机openload.co,你可以找到here . 我的程序可以上传 mp4 视频,但无法播放。当我下载以前上传的视频并通
我在服务器端使用 jquery-file-upload 和 Python-Flask。每当我上传 100mb 以上的大文件时,上传的版本比原始版本稍大并且无法打开(已损坏)。我对 10mb block
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我有一个按钮,它是我的 Magento 主题中提供的代码的一部分,根据日期/时间戳,我没有无意中编辑它。我确信它在某些时候是有效的,但回顾一下上周我的源代码控制,我似乎无法找出哪里出了问题。 这是按钮
我有一个将一些数据写入新文件的简单函数。它可以工作,并且文件已写入,但在 MSVS Express 2013 中调试时出现上述错误。 void writeSpecToFile(const char *
我试图包含我的应用程序的国际化,并且仅出于测试目的,我在文件 Localized.string 中添加了一行简单的代码。 这是我的整个文件: "Test locale" = "Test locale"
这是代码: console.log(234, document.links); console.log(235, document.links.length); 输出显示数组中有值,但返回 0。 这是
我在尝试使用 ASP.NET MVC3 的 Ajax.BeginForm 方法时遇到了一个奇怪的问题。表单通过正确的操作属性在页面上正确呈现。但是,当提交表单时,“OnFailure”事件返回“Not
我是 10 年级的学生,我在 APCS 的最终项目是制作一个游戏/应用程序并提交代码、运行视频和书面回复。我的问题是整个类(class)都是使用 Code.org 的 AppLab 进行教学的,并且
我正在使用带有 Microsoft auth 的 azure webapp。几个月来一直工作良好。 然而今天它坏了。login.microsoftonline.com 页面因 css 和 js 加载错
我遇到了一个奇怪的问题。直到几分钟前才出现问题。在不对 less/css 文件进行任何更改的情况下(从不),引导按钮和导航栏标题的外观突然发生了变化。在第一张图片上,您可以看到按钮应该是什么样子,在第
我正在开发一个用于核心转储处理的工具。使用 sysctl 我将其设置为获取工具输入的核心转储。一切都运转良好。但今天我面临着(我不知道为什么)coredump 损坏的情况。当我将常规文件设置为核心转储
我对一个我继承但并非最初创建的网站感到非常头疼。几乎所有的样式都是通过一个样式表完成的。问题是自动调整大小不再有效,所有页面现在都以指定的最小宽度显示。随着时间的推移,各种不同的人添加了它,CSS 变
我正在尝试使用 AngularJS 甚至纯 JavaScript 将 HTML 表格转换为 XLSX。 当我使用下面的方法转换为 XLS 时,它的下载正常并且 XLS 文件正在打开。 var blob
需要根帮助导致 vtable 损坏问题(不确定这是否正在发生)。这是代码的非常简化的版本。 class CBase { public: CBase() virtual ~CBase()
一段时间未在 Play 商店中更新我的应用程序后,我尝试使用我的 keystore 对我的一个 APK 进行签名,结果发现 keystore 和别名密码不再起作用。我可以使用此要点重置的 keysto
已安装 XCode 6在 Mavericks .它不运行。将操作系统更新为 Yosemite 10.10 :现在 Xcode.app(通过 *.dmg 安装)启动失败并显示错误消息 “Xcode” i
我有一个在我的应用程序中使用的 plist 文件,我可以对其进行本地化,因此我在我的项目中得到两个条目,一个用于英语,一个用于西类牙语,当我编译运行该应用程序时,它可以工作,但当然在这个阶段内容是相同
我相信这是来自 androidsnippets.org 的 fragment - 为什么它在 Android 2.3 上不起作用?如何解决? 错误 03-05 23:19:17.479: WARN/S
我是一名优秀的程序员,十分优秀!