我有一个父div,里面有多个子div(请参阅这里我正在谈论的内容http://garyoak.com/images/MgMenu.png).我希望能够仅使用键盘导航它,所以当用户推动可见元素时,我正在寻找一种向上或向下滚动子div的方法.我可以弄清楚用户什么时候没有问题,但我不确定如何实际上滚动内部divs up/down.我有jquery可用,可以添加扩展,没有问题.我知道jquery插件,如可滚动和旋转木马,但我希望有一个更简单的方法来做到这一点.
html最终看起来像这样:
<div id="MaigcPanels" class="MagicPanels">
<div id="MagicPanel0" class="MagicPanelSelected"><div class="Ice"><div class="MagicName">Blizzara</div><div class="MPCost">36</div></div></div>
<div id="MagicPanel1" class="MagicPanel"><div class="Fire"><div class="MagicName">Fire</div><div class="MPCost">15</div></div></div>
.... (rest of panel divs)
</div>
Run Code Online (Sandbox Code Playgroud)
第一个div有MagicPanelSelected作为它的类,因为它是当前选择的div.我可以保证无论我需要显示的活动/重要div总是有这个类.
在使用场景方面,我使用它来设计C++游戏的菜单(因此几个预定义的变量被推入页面,然后通过awesomium呈现它们).这就是为什么我要在不使用鼠标的情况下这样做的原因.Awesomium基于相当新的Chrome版本,因此该解决方案不需要跨浏览器兼容,只要它适用于Chrome.
我可以保证父div和子div的大小的固定长度(一旦我决定适当的长度),但MagicPanel div的数量可以在0到120+的任何一个时间范围内加载到父MagicPanels div中.我有变量可以告诉我总共有多少div和每行有多少div.
当用户滚过div组时,我希望能够循环回到开头(通过快速滚动回顶部,或者通过循环顶部div再次在底部)
如果它很重要,那就是这些元素的css
.MagicPanels
{
width: 580px;
height: 160px;
left: 4px;
position: relative;
display: inline-block;
-webkit-border-radius: 10px;
border-radius: 10px;
-webkit-box-shadow: 5px 5px 5px #888;
box-shadow: 5px 5px 5px #888;
border-width: 16px 16px 16px 16px;
-moz-border-image: url(MagicBorder.png) 33 32 33 34 round;
-webkit-border-image: url(MagicBorder.png) 33 32 33 34 round;
-o-border-image: url(MagicBorder.png) …Run Code Online (Sandbox Code Playgroud) 我正在研究一个有时会在向量上抛出调试断言错误的程序,更常见的错误是:
表达式:向量迭代器不可解除引用
问题是我不知道发生此错误的行或方法.在发生错误之前,我不希望手动步进/突破我的程序.我正在寻找找到行号或至少导致此错误的方法.
我正在使用VS2010
提前致谢
这更像是一个概念性的问题,但我会提供一个特殊的例子,我对此感到疑惑.如果我有一个具有多个对象作为属性的类,最好是在类中静态分配它们,还是在构造期间动态分配它们?例如,我有以下类(发出不必要的代码)
class OutlinedText
{
protected:
sf::Text BaseText;
sf::Text BackgroundText;
}
Run Code Online (Sandbox Code Playgroud)
sf :: Text也是对象.我的问题是,将它们如上所述更好,并按如下方式初始化它们
OutlinedText::OutlinedText(std::string &text, sf::Color MainColor, sf::Color OffsetColor, sf::Font &font, sf::Vector2f Pos, unsigned int BaseFontSize, unsigned int BackFontSize, float Offset)
{
BaseText = sf::Text(text, font, BaseFontSize);
BaseText.SetColor(MainColor);
BackgroundText = sf::Text(text, font, BackFontSize);
BackgroundText.SetColor(OffsetColor);
}
Run Code Online (Sandbox Code Playgroud)
或者,我应该将它们作为指针并使用new分配它们,如下所示:
BaseText = new sf::Text(text, font, BaseFontSize);
BaseText->SetColor(MainColor);
Run Code Online (Sandbox Code Playgroud)
并在析构函数中使用delete取消分配它们?我知道堆栈分配内存的速度更快,但我认为我正在以现在的方式初始化.那么它是一个案例的事情还是总是比另一个好?我还习惯于以C#的方式做事,所以我很好奇C++的正确方法是什么.如果我有一个根本的误解,请纠正我.
提前致谢
我有一个循环冗余两个类之间在我的项目循环依赖,StatusEffect和BaseCharacter.
这两个类需要彼此了解,因为BaseCharacter需要存储一组StatusEffects并且StatusEffect需要能够对其进行操作BaseCharacter.我不认为可以消除这种行为并仍然可以正常工作.这就是我现在要做的事情:
基本字符命名空间内部存在Game::Character和StatusEffect存在的命名空间内Game::StatusEffects
在StatusEffects.h里面,我BaseCharacter像这样声明:
namespace Game {
namespace Character {
class BaseCharacter;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在下面:
namespace Game
{
namespace StatusEffects
{
class StatusEffect
{
public:
virtual void TickCharacter(Game::Character::BaseCharacter* character, int ticks = 1)
{
std::cout << "Name " << character->GetName() << std::endl;
}
protected:
private:
std::string name;
int StatusEffectUID;
};
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这给了我一个编译器错误:
错误1错误C2027:使用未定义类型'Game :: Character :: BaseCharacter'
我认为,因为我正在使用指针,这个前向声明很好.我需要转发申报吗?我不需要转发声明整个类定义吗?
我正在为这种情况寻找合适的数据结构.我有提升可用.
代码最初是在C#中,我在那里使用了一个队列,但我不认为这是一个合适的选择,据我所知,C#的队列没有C++等价物.我正在查看以下属性的频率/重要性:
元素的数量在创建时将是已知的,并且将是50到200个元素.结构永远不会超过这个,但可能偶尔保持较少
我正在考虑使用std :: list,但是需要清除然后偶尔重新填充,这似乎不是一个好的选择.当我创建一个固定大小的列表,然后清除它,它失去了前缀大小不是吗?是否有一些方法可以始终保持列表大小,以便它不必释放/分配内存?
我知道boost有一个队列数据结构,但它不可迭代,我不确定它是否会遇到同样的问题 std::list
关于如何适应std::list我的问题或更合适的数据结构的一些建议会有所帮助.
在我的一个类中,我有一个存储一组枚举标志的整数,如下所示:
enum AttackFlags
{
Contact = 1, //Move connects with target
Projectile = 2, //Attack is projectile based
Unblockable = 4, //Attack can not be blocked
UncounterableLv1 = 8, //Attack can't be countered except by extreme counter attack skills/status effects
UncounterableLv2 = 16, //Attack can not be countered
Flinches = 32, //Has a chance to stun the enemy, pushing back their next turn
Unreflectable = 64, //Attack penetrates reflect. Only checked for Magic attacks
IgnoreDefenderStatusEffects = 128, //Ignores active status …Run Code Online (Sandbox Code Playgroud) 我有一个问题,
/ +和just +有什么区别?
在我的程序中,我有这行代码
md_addr_t GSharePC = PC >> (PC_ZERO_BITS/* + (int)log2(Tournament_Counters)*/) & (Tournmanet_GShare_PHT_Entries - 1);
Run Code Online (Sandbox Code Playgroud)
然而,当我去取消注释它时,我意外地离开了第一个/ in
md_addr_t GSharePC = PC >> (PC_ZERO_BITS/ + (int)log2(Tournament_Counters)) & (Tournmanet_GShare_PHT_Entries - 1);
Run Code Online (Sandbox Code Playgroud)
应该是公正的
md_addr_t GSharePC = PC >> (PC_ZERO_BITS + (int)log2(Tournament_Counters)) & (Tournmanet_GShare_PHT_Entries - 1);
Run Code Online (Sandbox Code Playgroud)
做/ +和/有什么区别?它真的分裂然后添加?如果是这样的话,它究竟是什么划分?任何清晰度将不胜感激.我很感兴趣,因为使用/ +实际上为我运行的程序生成了更好的结果然后只是+做了.
我有一个
map<char*, int> labels;
Run Code Online (Sandbox Code Playgroud)
那表现出一些我根本无法解决的行为.对于一个索引,它会返回不同的值,因为我非常确定它们是相同的索引.下面是一个例子:
在我的程序前面,我添加了一个条目如下:
labels[current->u.bj.target->name] = blockNum + 1;
//Test code
if (blockNum + 1 == 9)
{
stringtest = current->u.bj.target->name;
cout << "Condition Met" << endl;
testCond = true;
}
Run Code Online (Sandbox Code Playgroud)
稍后在我的程序中,我执行以下操作
if ((*stringtest) == (*current->u.bj.target->name))
cout << "Why is this printing the correct val " <<labels[stringtest] << endl;
branchTarget = labels[current->u.bj.target->name];
cout << "Why is this value different" << branchTarget << endl;
Run Code Online (Sandbox Code Playgroud)
从cout语句中可以看出,labels[stringtest]返回9,但labels[current->u.bj.target->name]返回0,尽管它们都指向同一个事实.任何人都可以给我一个想法是什么错误/如何解决它?我几乎是肯定的,我从来没有把0放到地图上.
我在头文件中声明了一个静态无序映射,如下所示:
static boost::unordered_map<KeyAction, sf::Key::Code> WindowKeyMap;
Run Code Online (Sandbox Code Playgroud)
在同一个头文件中,我有一个用一些值填充地图的函数:
static void Initialize(std::string &file)
{
WindowKeyMap[MoveLeft] = sf::Key::Code::Left;
WindowKeyMap[MoveRight] = sf::Key::Code::Right;
WindowKeyMap[MoveUp] = sf::Key::Code::Up;
WindowKeyMap[MoveDown] = sf::Key::Code::Down;
std::cout << std::endl << WindowKeyMap.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
稍后在我的程序中,在一个单独的类/函数中,我尝试读取其中一个值:
std::cout << std::endl << WindowKeyMap.size() << std::endl;
auto test2 = WindowKeyMap[MoveRight];
Run Code Online (Sandbox Code Playgroud)
但地图总是空的.控制台的输出始终是初始化例程的4,然后是第二个cout的0.我认为静态地图在程序中是持久的,所以我对我的静态地图如何空洞感到有些困惑.任何人都能解释一下吗?
谢谢
我有一个包含类的头文件.在那个类中,我有一个像这样的函数:
class Definition
{
public:
int GetID()
{
return Id;
}
//Other methods/variables
private:
int Id;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试获取该ID时:
for (std::map<Definition, std::vector<bool> >::iterator mapit = DefUseMap.begin(); mapit != DefUseMap.end(); ++mapit, defIndex++)
{
stream << "Definition " << (*mapit).first.GetID() << " Def Use" << endl << "\t";
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
CFG.cc:1145:错误:将'const Definition'作为'int Definition :: GetID()'的'this'参数传递,丢弃限定符
是因为我在地图中使用了定义,而且我不允许在该映射定义上调用方法?有没有办法让ID变量出来?
提前致谢