小编hax*_*por的帖子

我可以将对象类转换为它实现的接口指针吗?

我已经定义了如下所示的接口类.

class IRecyclableObject
{
public:
    virtual ~IRecyclableObject() {}

    virtual void recycle() = 0;
    virtual void dump() = 0;
    virtual int getRecycleTypeID() = 0;
};
Run Code Online (Sandbox Code Playgroud)

以下是我的CharacterAI类,它继承了另一个类并实现了上面的接口类.它的定义如下.

class CharacterAI : public harp::Character, public harp::IRecyclableObject
{
public:
    CharacterAI();
    virtual ~CharacterAI();

    ...

    // -- note these 3 virtual functions -- //
    virtual void recycle();
    virtual void dump();
    virtual int getRecycleTypeID();

    ...
};
Run Code Online (Sandbox Code Playgroud)

接口中定义的那三个虚函数,我已经在CharacterAI类中实现了它.没有什么花哨的.

是时候将它们与ObjectPool(一个自制的)类一起使用,其中可用对象的数据存储在

m_freeList
Run Code Online (Sandbox Code Playgroud)

使用CCArray类.

以下代码中出现此问题.

IRecyclableObject* ObjectPool::popFreeObjectAndAddToActiveListForType(int recycleTypeID)
{
    // search from free-list
    for(unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ casting interface cocos2d-x

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

浮点计算使用float而不是double来得到不同的结果

我有以下代码行.

hero->onBeingHit(ENEMY_ATTACK_POINT * (1.0 - hero->getDefensePercent()));
Run Code Online (Sandbox Code Playgroud)
  • void onBeingHit(int decHP) 方法接受整数并更新健康点.
  • float getDefensePercent() method是一个getter方法,返回英雄的防御百分比.
  • ENEMY_ATTACK_POINT是一个定义为的宏常数因子#define ENEMY_ATTACK_POINT 20.

让我们说hero->getDefensePercent()回报0.1.所以计算是

20 * (1.0 - 0.1)  =  20 * (0.9)  =  18
Run Code Online (Sandbox Code Playgroud)

每当我尝试使用以下代码时(无f附加1.0)

hero->onBeingHit(ENEMY_ATTACK_POINT * (1.0 - hero->getDefensePercent()));
Run Code Online (Sandbox Code Playgroud)

17岁了.

但是对于以下代码(f后面附后1.0)

hero->onBeingHit(ENEMY_ATTACK_POINT * (1.0f - hero->getDefensePercent()));
Run Code Online (Sandbox Code Playgroud)

18岁了.

这是怎么回事?是f显著要不惜任何虽然hero->getDefensePercent()已在浮动?

c++ floating-point double floating-accuracy

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

如何从AVFoundation获得光照值?

我使用Swift 3并使用相机AVFoundation

谁知道有没有办法知道光的容量?

我知道其中一种方法是使用环境光传感器,但它不鼓励,最终应用程序不允许在市场上

我发现问题非常接近我需要的问题

检测iPhone是否在黑暗的房间里

那家伙解释说我可以用 ImageIO framework, read the metadata that's coming in with each frame of the video feed

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
  CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL, sampleBuffer, kCMAttachmentMode_ShouldPropagate);
  NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict];
  CFRelease(metadataDict);
  NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];
  float brightnessValue = [[exifMetadata objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue]  floatValue];
}
Run Code Online (Sandbox Code Playgroud)

但我是iOS的新手,不知道如何在Swift中转换这段代码

提前致谢!

ios swift

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

为什么我们不能从类中访问全局非静态变量?

我定义了以下几个类在应用程序中使用的结构.

ZHTypes.h

#ifndef ZHTypes_h
#define ZHTypes_h

struct BeingHitParams
{
    bool isApplyKnockBack=true;
};
BeingHitParams *default_BeingHitParams_ptr = new BeingHitParams();

#endif
Run Code Online (Sandbox Code Playgroud)

我定义了一个跟随变量

default_BeingHitParams_ptr
Run Code Online (Sandbox Code Playgroud)

对于这种情况,我将在几个地方使用它作为函数的默认参数,因为我不需要一直创建一个新的结构.

无论如何,每当我在类中的代码中引用它时,上面定义的变量就会产生链接错误.但如果我在前面添加静态,那么它可以正常工作.

static BeingHitParams *default_BeingHitParams_ptr = new BeingHitParams();
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么我们不能从类中访问全局但非静态的变量?我还想知道为什么C++在访问变量时受到限制的其他解释,就像上面的情况一样.

c++

0
推荐指数
1
解决办法
931
查看次数