2016-04-07 5 views
0

i cocos 2dx Spiel entwickelt haben, in denen ich animation in der Sprite in denen leite ich die aktuelle texture name dafür bekommen möchte ich folgenden Code versucht haben:Get Textur von Sprite in cocos 2DX

CCSpriteFrame *frameN = fisherManBoat->displayFrame(); 
frameName = frameN->_textureFilename; 

Aber es gibt mir Fehler, dass textureFilename geschützt ist, wie kann ich es lösen? Wenn es nicht funktioniert, was kann ich sonst noch versuchen? Weil es eine Schaltfläche auf dem Bildschirm gibt, auf der ich tippe und Animation läuft, möchte ich es glatt machen. Also, wenn die Animation beim Tapen wieder dazwischen ist, beginnt sie nicht von neuem, sondern von ihrem aktuellen Punkt aus.

+0

Halten Sie die Dateinamen/Texturen in einer Vektorinstanzvariablen? Sie werden wahrscheinlich auch eine Indexinstanzvariable benötigen, damit Sie wissen, welches Element im Vektor gerade verwendet wird. – trojanfoe

+0

Aber wie bekomme ich den aktuellen Animationsrahmen des Sprites? @trojanfoe –

+0

Sie werden es wissen, wie Sie es einstellen. Es gibt kein Geheimnis, was der aktuelle Rahmen ist, wie Sie ihn definieren. – trojanfoe

Antwort

0

Wenn Sie auf die Variable _textureFilename zugreifen möchten, müssen Sie die Datei CCSpriteFrame.h ändern.

Zuerst dieser Code finden müssen in CCSpriteFrame.h

Datei
protected: 
    Vec2 _offset; 
    Size _originalSize; 
    Rect _rectInPixels; 
    bool _rotated; 
    Rect _rect; 
    Vec2 _offsetInPixels; 
    Size _originalSizeInPixels; 
    Texture2D *_texture; 
    std::string _textureFilename; 
    PolygonInfo _polygonInfo; 

und schneiden unter der Linie von diesem Code

std::string _textureFilename; 

jetzt haben Sie es oben auf CCSpriteFrame.h Datei einfügen wo öffentlicher Bereich definiert ist.

class CC_DLL SpriteFrame : public Ref, public Clonable 
{ 
public: 

    std::string _textureFilename; 

Ich hoffe, es wird Ihnen helfen. Vielen Dank.

+0

Das ist eine ziemlich schlechte Idee und wird ein nie endendes Wartungsproblem für sehr wenig Nutzen verursachen. – trojanfoe

+0

Ich weiß, es ist keine gute Idee, aber manchmal muss man es tun. –

+0

Ich gebe nur die einfache Lösung für die gestellte Frage. Wenn Sie eine bessere Lösung haben, antworten Sie bitte. @ trojanfoe. –

Verwandte Themen