我正在编写Starling的棋盘游戏(动作脚本3).我使用的Starling版本有一个名为Sprite3D的类,它允许我方便,轻松地编码在这个游戏中使用的卡片的翻转.我很困扰的事实是我的卡片在翻转时会改变尺寸,而我无法找到更改的来源.
所有帮助表示赞赏.
可以在此YouTube视频上查看此问题.
在github页面上可以在github上完整地看到代码.
我将继续更详细地介绍......视频中包含以下所有信息.
Card类不包含可视信息.它是一个控制器类.它确实拥有两个精灵.一个精灵填充正面,另一个精灵填充背面.Card类还应用了蒙版和尺寸属性,以使面具有相同的大小和形状.
Card类还包含动画代码.设置卡片动画的代码与在starling博客上发现的视频中使用的代码非常相似,该视频显示了如何在2D内存游戏中快速,轻松地实现Stage3D.Card类通过使用补间动画旋转,以将卡的rotationY属性从0 更改为PI,并在触摸事件上将PI从PI更改为0.在翻转过程中发生错误,因此我将在此处包含翻转代码:
public function flip() : void {
_state = !(this._state);
if( this.animations ){
var tween : starling.animation.Tween = new Tween( this, 2, starling.animation.Transitions.EASE_OUT_BOUNCE );
var card : Card = this;
var didFlip : Boolean = false;
tween.animate("rotationY", this._state == Card.FACE_UP ? Math.PI : 0 );
tween.onUpdate = updateVisibility;
Starling.juggler.add( tween );
}
}
private function updateVisibility():void
{
var sHelper:Vector3D = new Vector3D();
var card : …Run Code Online (Sandbox Code Playgroud) 我有一个类使用友元函数来重载运算符>>.重载的操作符方法在标准cin使用上测试良好.但是,当我尝试升级代码以使用ifstream对象而不是istream对象时,原型不会被识别为有效方法.
我理解ifstream是从istream继承的,因此,多态应该允许ifstream对象与istream重载函数一起运行.我的理解有什么问题?
是否有必要为每个输入流类型复制函数?
类:
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
class Hospital {
public:
Hospital(std::string name);
std::string getName();
void write();
friend ostream & operator<<( ostream &os, Hospital &hospital );
friend istream & operator>>( istream &is, Hospital &hospital );
private:
void readFromFile( std::string filename );
std::string m_name;
};
Run Code Online (Sandbox Code Playgroud)
功能实现:
istream &operator>>( istream &is, Hospital &hospital ){
getline( is, hospital.m_name );
return is;
}
Run Code Online (Sandbox Code Playgroud)
错误:
Hospital.cpp:在成员函数'void Hospital :: readFromFile(std :: string)':Hospital.cpp:42:24:错误:不匹配'operator >>'(操作数类型是'std :: ifstream {aka std :: basic_ifstream}'和'Hospital*')storedDataFile >> …