小编Meg*_*ron的帖子

以编程方式在父div中滚动一组div

我有一个父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)

javascript css jquery

5
推荐指数
1
解决办法
5491
查看次数

如何在Visual C++中查找导致调试断言错误的行/方法

我正在研究一个有时会在向量上抛出调试断言错误的程序,更常见的错误是:

表达式:向量迭代器不可解除引用

问题是我不知道发生此错误的行或方​​法.在发生错误之前,我不希望手动步进/突破我的程序.我正在寻找找到行号或至少导致此错误的方法.

我正在使用VS2010

提前致谢

c++ debugging visual-studio-2010

4
推荐指数
1
解决办法
1336
查看次数

最好在类中的堆栈或堆上进行分配

这更像是一个概念性的问题,但我会提供一个特殊的例子,我对此感到疑惑.如果我有一个具有多个对象作为属性的类,最好是在类中静态分配它们,还是在构造期间动态分配它们?例如,我有以下类(发出不必要的代码)

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++的正确方法是什么.如果我有一个根本的误解,请纠正我.

提前致谢

c++ constructor

3
推荐指数
1
解决办法
994
查看次数

前向声明问题

我有一个循环冗余两个类之间在我的项目循环依赖,StatusEffectBaseCharacter.

这两个类需要彼此了解,因为BaseCharacter需要存储一组StatusEffects并且StatusEffect需要能够对其进行操作BaseCharacter.我不认为可以消除这种行为并仍然可以正常工作.这就是我现在要做的事情:

基本字符命名空间内部存在Game::CharacterStatusEffect存在的命名空间内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++ forward-declaration

3
推荐指数
1
解决办法
1774
查看次数

使用什么数据结构

我正在为这种情况寻找合适的数据结构.我有提升可用.

代码最初是在C#中,我在那里使用了一个队列,但我不认为这是一个合适的选择,据我所知,C#的队列没有C++等价物.我正在查看以下属性的频率/重要性:

  • 需要快速迭代
  • 需要能够快速推进结构(即当我从顶部拉出一个元素时,下一个元素应该是结构头)
  • 偶尔会被清除,然后完全重新填充
  • 偶尔会复制
  • 不需要对元素进行排序,因为元素将以正确的顺序添加

元素的数量在创建时将是已知的,并且将是50到200个元素.结构永远不会超过这个,但可能偶尔保持较少

我正在考虑使用std :: list,但是需要清除然后偶尔重新填充,这似乎不是一个好的选择.当我创建一个固定大小的列表,然后清除它,它失去了前缀大小不是吗?是否有一些方法可以始终保持列表大小,以便它不必释放/分配内存?

我知道boost有一个队列数据结构,但它不可迭代,我不确定它是否会遇到同样的问题 std::list

关于如何适应std::list我的问题或更合适的数据结构的一些建议会有所帮助.

c++ boost data-structures

3
推荐指数
1
解决办法
190
查看次数

C++检查枚举标志

在我的一个类中,我有一个存储一组枚举标志的整数,如下所示:

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)

c++ enums

3
推荐指数
2
解决办法
7220
查看次数

C中的+ +和+之间的区别?

我有一个问题,

/ +和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)

做/ +和/有什么区别?它真的分裂然后添加?如果是这样的话,它究竟是什么划分?任何清晰度将不胜感激.我很感兴趣,因为使用/ +实际上为我运行的程序生成了更好的结果然后只是+做了.

c

2
推荐指数
1
解决办法
203
查看次数

C++地图问题

我有一个

 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放到地图上.

c++ string map

2
推荐指数
1
解决办法
372
查看次数

我的静态地图总是空的

我在头文件中声明了一个静态无序映射,如下所示:

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.我认为静态地图在程序中是持久的,所以我对我的静态地图如何空洞感到有些困惑.任何人都能解释一下吗?

谢谢

c++ unordered-map c++11

2
推荐指数
1
解决办法
657
查看次数

奇怪的const正确性错误

我有一个包含类的头文件.在那个类中,我有一个像这样的函数:

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变量出来?

提前致谢

c++

2
推荐指数
1
解决办法
126
查看次数