void TFrameHandle::setCurrentFrame(int frame) { if (m_frameType == LevelFrame) { // std::vector<TFrameId> fids; // if(!getCurrentLevelFids(fids)) return; if (m_fids.size() <= 0) return; if (frame - 1 >= (int)m_fids.size()) setFid(m_fids.back()); else setFid(m_fids[frame - 1]); } else setFrame(frame - 1); }
void TFrameHandle::setFrameIndexByName(const QString &str) { int num = str.toInt(); if (m_frameType == LevelFrame) { setFid(TFrameId(num)); } else setFrame(num - 1); }
void TFrameHandle::setFrameIndex(int index) { if (m_frameType == LevelFrame) { // std::vector<TFrameId> fids; if (m_fids.size() > 0 && 0 <= index && index < (int)m_fids.size()) setFid(m_fids[index]); } else setFrame(index); }
void TFrameHandle::prevFrame() { if (m_frameType == LevelFrame) { // std::vector<TFrameId> fids; if (m_fids.size() <= 0) return; std::vector<TFrameId>::iterator it; it = std::lower_bound(m_fids.begin(), m_fids.end(), m_fid); // tornando indietro non vado prima del primo frame del livello if (it != m_fids.end() && it != m_fids.begin()) { --it; setFid(*it); } else { // se sono dopo l'ultimo, vado all'ultimo if (!m_fids.empty() && m_fid > m_fids.back()) setFid(m_fids.back()); } } else { if (m_frame > 0) setFrame(m_frame - 1); } }
void TFrameHandle::lastFrame() { if (m_frameType == LevelFrame) { // std::vector<TFrameId> fids; if (m_fids.size() <= 0) return; setFid(m_fids.back()); } else { /*int r0,r1,step; getCurrentScenePlayRange(r0,r1,step);*/ if (m_frame1 > 0) setFrame(m_frame1); } }
void TFrameHandle::nextFrame() { if (m_frameType == LevelFrame) { // std::vector<TFrameId> fids; // if(!getCurrentLevelFids(fids)) return; if (m_fids.size() <= 0) return; std::vector<TFrameId>::iterator it; it = std::upper_bound(m_fids.begin(), m_fids.end(), m_fid); if (it == m_fids.end()) { // non c'e' nessun frame del livello oltre m_fid. Non vado oltre al primo // frame dopo l'ultimo. // TXshSimpleLevel *sl = // TApp::instance()->getCurrentLevel()->getSimpleLevel(); TFrameId fid = m_fids.back(); // sl->index2fid(sl->getFrameCount()); setFid(fid); } else setFid(*it); } else { setFrame(m_frame + 1); } }
bool Astar::checkOpen(int col, int row, int id) { // 检查open列表中是否有更小的步长,并排序 for(int i = _open->count() - 1; i > 0; i--) { auto item = (AstarItem*)_open->getObjectAtIndex(i); if(item->getCol() == col && item->getRow() == row) { int tempG = getG(col, row, id); if(tempG < item->getG()) { item->setG(tempG); item->setFid(id); item->setF(tempG + item->getH()); resetSort(i); } return false; } } return true; }