示例#1
0
XBool XAudioStream::getAFrame()	//从流中提取一帧数据
{
	if(!m_isLoaded) return XFalse;
	av_free_packet(&m_dataPacket);	//释放上一次获得的数据
	av_init_packet(&m_dataPacket);
	if(av_read_frame(m_pFormatCtx,&m_dataPacket) == 0)
	{//这里见音频数据解码
		m_pFrame = av_frame_alloc();

		int isFinished;
		if(avcodec_decode_audio4(m_pAudioCodecCtx,m_pFrame,&isFinished,&m_dataPacket) < 0) return XFalse;
		if(isFinished)
		{
			uint8_t *out[] = {m_audioBuf}; 
			int outSize = ((AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2) / m_frameDataSum;
			m_dataLen = swr_convert(m_pSwrContext,out,outSize,(const uint8_t **)m_pFrame->extended_data,m_pFrame->nb_samples);  
			m_dataLen = m_dataLen * m_frameDataSum;
			av_frame_free(&m_pFrame);
			return XTrue;//解码成功
		}
		av_frame_free(&m_pFrame);
	}else 
	{
		gotoFrame(0.0f);	//跳到头
		LogStr("File end!");
		return XFalse;
	}
	return XFalse;
}
void ActionTimeline::gotoFrameAndPause(int startIndex)
{
    _startFrame = _currentFrame = startIndex;
    _time       = _currentFrame * _frameInternal;

    pause();
    gotoFrame(_currentFrame);
}
void ActionTimeline::gotoFrameAndPlay(int startIndex, int endIndex, int currentFrameIndex, bool loop)
{
    _startFrame = startIndex;
    _endFrame = endIndex;
    _currentFrame = currentFrameIndex;
    _loop = loop;
    _time = _currentFrame*_frameInternal;

    resume();
    gotoFrame(_currentFrame);
}
示例#4
0
void Hero::onSpellCasted(GameEventPointer e, EventDispatcher* dispatcher) {
  if (m_spell) {
    gotoFrame(0);
    dispatchEvent(e, dispatcher);

    if (m_spell->parent()) {
      m_spell->parent()->removeChild(m_spell);
    }

    m_spell = NULL;


  }

}
示例#5
0
void Hero::onEvent(const Event& e) {
  if (e.event_type == EventType::MouseDown) {
    int x = floor((e.mouse_data.x - m_parent->x()) / m_context.TILE_SIZE);
    int y = floor((e.mouse_data.y - m_parent->y()) / m_context.TILE_SIZE);

    if (m_state == State::Spell && m_spell) {
      m_spell->addEventListener(ET::spell, this, static_cast<Listener>(&Hero::onSpellCasted));
      m_spell->cast(point(m_x / m_context.TILE_SIZE, m_y / m_context.TILE_SIZE), point(x, y));
      m_state = State::Stand;
      gotoFrame(1, 1);
    }
  }
  else if (e.event_type == EventType::MouseMoved) {
    int x = floor((e.mouse_data.x - m_parent->x()) / m_context.TILE_SIZE);
    int y = floor((e.mouse_data.y - m_parent->y()) / m_context.TILE_SIZE);

    if (m_state == State::Stand) {
      drawPath(x, y);
    }    
    if (m_state == State::Spell) {
      m_spell->onEvent(e);
    }
  }
}
示例#6
0
int gotoMsec(unsigned long msec) {
	int ret;
	ret = gotoFrame(framesFromMSec(msec));
	return ret;
}
示例#7
0
//--------------------------------------------------------------
bool Sprite::processOscMessage(const ofxOscMessage& message) {
	
	// call the base class
	if(DrawableObject::processOscMessage(message)) {
		return true;
	}


	if(message.getAddress() == oscRootAddress + "/position") {
		tryNumber(message, pos.x, 0);
		tryNumber(message, pos.y, 1);
		return true;
	}
	else if(message.getAddress() == oscRootAddress + "/position/x") {
		tryNumber(message, pos.x, 0);
		return true;
	}
	else if(message.getAddress() == oscRootAddress + "/position/y") {
		tryNumber(message, pos.y, 0);
		return true;
	}
	
	
	else if(message.getAddress() == oscRootAddress + "/size") {
		tryNumber(message, width, 0);
		tryNumber(message, height, 1);
		resizeIfNecessary();
		return true;
	}
	else if(message.getAddress() == oscRootAddress + "/size/width") {
		tryNumber(message, width, 0);
		resizeIfNecessary();
		return true;
	}
	else if(message.getAddress() == oscRootAddress + "/size/height") {
		tryNumber(message, height, 0);
		resizeIfNecessary();
		return true;
	}

	else if(message.getAddress() == oscRootAddress + "/frame") {
		unsigned int frame = 0;
		tryNumber(message, frame, 0);
		gotoFrame(frame);
		return true;
	}


	else if(message.getAddress() == oscRootAddress + "/animate") {
		tryBool(message, bAnimate, 0);
		return true;
	}
	else if(message.getAddress() == oscRootAddress + "/loop") {
		tryBool(message, bLoop, 0);
		return true;
	}
	else if(message.getAddress() == oscRootAddress + "/pingpong") {
		tryBool(message, bPingPong, 0);
		return true;
	}
	
	else if(message.getAddress() == oscRootAddress + "/center") {
		bool b = bDrawFromCenter;
		if(tryBool(message, b, 0)) {
			setDrawFromCenter(b);
		}
		return true;
	}
	else if(message.getAddress() == oscRootAddress + "/overlay") {
		tryBool(message, bDrawAllLayers, 0);
		return true;
	}

	return false;
}
示例#8
0
void MovieClip::gotoAndStop(int frame)
{
	gotoFrame(frame);
	stop();
}
示例#9
0
void MovieClip::gotoAndPlay(int frame)
{
	gotoFrame(frame);
	play();
}
示例#10
0
void MovieClip::oneFrame()
{
    if (!playing_)
    {
        return;
    }

	if (passoneframe_ == true)
	{
		passoneframe_ = false;
		return;
	}

	std::map<int, int>::iterator iter2 = actions_.find(frame_);
	if (iter2 != actions_.end())
	{
        if (iter2->second == -1)
        {
			stop();
            CompleteEvent event(CompleteEvent::COMPLETE);
            dispatchEvent(&event);
        }
		else
			gotoFrame(iter2->second);

		return;
	}

	if (frame_ == maxframe_)
	{
		stop();
        CompleteEvent event(CompleteEvent::COMPLETE);
        dispatchEvent(&event);
        return;
	}

	std::map<int, std::vector<Frame*> >::iterator iter;

	iter = activeFrames_.find(frame_);
	if (iter != activeFrames_.end())
	{
		const std::vector<Frame*>& frames = iter->second;
		for (std::size_t i = 0; i < frames.size(); ++i)
			removeChild2(frames[i]->sprite);
		activeFrames_.erase(iter);
	}

	frame_ = frame_ + 1;

	iter = allFrames_.find(frame_);
	if (iter != allFrames_.end())
	{
		const std::vector<Frame*>& frames = iter->second;
		for (std::size_t i = 0; i < frames.size(); ++i)
		{
			activeFrames_[frames[i]->end].push_back(frames[i]);
			addChild2(frames[i]->sprite);
		}
	}
	
	interpolateParameters();
}
void ViewerSettingsPanelCamera::on_lastScanButton_clicked(){
	gotoFrame(m_numberFrames);
}
void ViewerSettingsPanelCamera::on_firstScanButton_clicked(){
	gotoFrame(1);
}
void ViewerSettingsPanelCamera::on_previousScanButton_clicked(){
	gotoFrame(m_currentFrame - 1);
}
void ViewerSettingsPanelCamera::on_nextScanButton_clicked(){
	gotoFrame(m_currentFrame + 1);
}
void ViewerSettingsPanelCamera::on_scanProgressSlider_sliderMoved(int value) {
     gotoFrame(value);
}