private void OnDraw() { Vector3 notePosition = Vector3.zero; float noteLength = _setLength; int maxCount = Math.Max(_highSymbolList.Count, _lowSymbolList.Count); if (_setList.Count != 0) { noteLength = _setLength / maxCount; } for (int i = 0; i < _highSymbolList.Count; i++) { // 新建HighNote对象作为目录 string objName = "HighNote" + (i + 1); GameObject highNoteObj = new GameObject(objName); highNoteObj.transform.SetParent(_parentObject.transform); highNoteObj.transform.localPosition = new Vector3( notePosition.x + _paramsGetter.GetBeatWidth() + noteLength * i, notePosition.y + _paramsGetter.GetTotalHeight(), notePosition.z); // 将Set对象赋为下一层的父对象 if (_highSymbolList[i] is Note) { NoteView noteView = new NoteView(_highSymbolList[i], (int)noteLength, _paramsGetter.GetSymbolStart(), highNoteObj); _highSymbolList[i].SetSymbolView(noteView); } else if (_highSymbolList[i] is Rest) { RestView restView = new RestView(_highSymbolList[i], (int)noteLength, _paramsGetter.GetSymbolStart(), highNoteObj); _highSymbolList[i].SetSymbolView(restView); } } for (int i = 0; i < _lowSymbolList.Count; i++) { // 新建LowNote对象作为目录 string objName = "LowNote" + (i + 1); GameObject lowNoteObj = new GameObject(objName); lowNoteObj.transform.SetParent(_parentObject.transform); lowNoteObj.transform.localPosition = new Vector3( notePosition.x + _paramsGetter.GetBeatWidth() + noteLength * i, notePosition.y, notePosition.z); // 将Set对象赋为下一层的父对象 if (_lowSymbolList[i] is Note) { NoteView noteView = new NoteView(_lowSymbolList[i], (int)noteLength, _paramsGetter.GetSymbolStart(), lowNoteObj); _lowSymbolList[i].SetSymbolView(noteView); } else if (_lowSymbolList[i] is Rest) { RestView restView = new RestView(_lowSymbolList[i], (int)noteLength, _paramsGetter.GetSymbolStart(), lowNoteObj); _lowSymbolList[i].SetSymbolView(restView); } } }
public List <List <Measure> > Generate(List <Measure> measureList, int scoreWidth) { List <List <Measure> > scoreList = new List <List <Measure> >(); // 整张乐谱 for (int i = 0; i < measureList.Count; i += 4) { List <Measure> paragraphList = new List <Measure>(); // 一行 int measureRest = scoreWidth; for (int j = i; j < i + 4 && j < measureList.Count; j++) { if (measureList[j].HasHead()) // 去掉谱号长度 { measureRest -= _paramsGetter.GetHeadWidth(); } if (measureList[j].HasBeat()) // 去掉拍号长度 { measureRest -= _paramsGetter.GetBeatWidth(); } measureRest -= measureList[j].GetMaxCount() * _paramsGetter.GetUnit(); // 去掉每一个小节中音符压缩到最挤的时候所占的长度 } // 此时将measureRest剩下的长度平分给每一个小节 int averageRest = measureRest / 4; for (int j = i; j < i + 4 && j < measureList.Count; j++) { int measureLength = measureList[j].GetMaxCount() * _paramsGetter.GetUnit() + averageRest; if (measureList[j].HasHead()) // 加上谱号长度 { measureLength += _paramsGetter.GetHeadWidth(); } if (measureList[j].HasBeat()) // 加上拍号长度 { measureLength += _paramsGetter.GetBeatWidth(); } measureList[j].SetMeasureLength(measureLength); paragraphList.Add(measureList[j]); } scoreList.Add(paragraphList); } // int index = 0; // while (index < measureList.Count) // { // List<Measure> paragraphList = new List<Measure>(); // 一行 // paragraphList.Add(measureList[index]); // 首先在一行中放入一个小节 // int usedLen = measureList[index].GetMaxCount() * 10; // 此时一行中使用的长度 // while (usedLen < screenSize[0]) // { // // usedLen += measureList[index].GetMaxCount() * 10; // index++; // } // // scoreList.Add(paragraphList); // } return(scoreList); }
public List <List <Measure> > Generate(List <Measure> measureList, int scoreWidth) { List <List <Measure> > scoreList = new List <List <Measure> >(); // 整张乐谱 int maxMeasureInLine = 4; // 固定一节最多放四个小节 for (int i = 0; i < measureList.Count; i += maxMeasureInLine) { // 为每一行第一个小节自动添加谱号信息 List <Head> headList = measureList[0].GetHead(); if (headList != null) { measureList[i].SetHead(headList[0], headList[1]); measureList[i].SetHasHead(true); } List <Measure> paragraphList = new List <Measure>(); // 一行 int measureRest = scoreWidth; for (int j = i; j < i + 4 && j < measureList.Count; j++) { if (measureList[j].HasHead()) // 去掉谱号长度 { measureRest -= _paramsGetter.GetHeadWidth(); } if (measureList[j].HasBeat()) // 去掉拍号长度 { measureRest -= _paramsGetter.GetBeatWidth(); } measureRest -= measureList[j].GetMaxCount() * _paramsGetter.GetUnit(); // 去掉每一个小节中音符压缩到最挤的时候所占的长度 } // 此时将measureRest剩下的长度平分给每一个小节 int averageRest = measureRest / maxMeasureInLine; for (int j = i; j < i + 4 && j < measureList.Count; j++) { int measureLength = measureList[j].GetMaxCount() * _paramsGetter.GetUnit() + averageRest; if (measureList[j].HasHead()) // 加上谱号长度 { measureLength += _paramsGetter.GetHeadWidth(); } if (measureList[j].HasBeat()) // 加上拍号长度 { measureLength += _paramsGetter.GetBeatWidth(); } measureList[j].SetMeasureLength(measureLength); paragraphList.Add(measureList[j]); } scoreList.Add(paragraphList); } return(scoreList); }
private void OnDraw() { // 绘制小节的五线谱 DrawMeasureLines(); int shift = 0; // 如果有头部信息的偏移 // 如果有谱号信息,绘制 if (_measure.HasHead()) { DrawClef(); shift += _paramsGetter.GetHeadWidth(); } // 如果有拍号信息,绘制 if (_measure.HasBeat()) { DrawBeat(); shift += _paramsGetter.GetBeatWidth(); } // 每小节的长度 float setLength = _measure.GetMeasureLength() - shift; Vector3 setPosition = Vector3.zero; if (_measure.GetMeasureSymbolList().Count != 0) { setLength /= _measure.GetMeasureSymbolList().Count; } // 遍历一个小节中的所有组队,绘制每个组队 for (int i = 0; i < _measure.GetMeasureSymbolList().Count; i++) { // 新建Set对象作为目录 string objName = "Set" + (i + 1); GameObject setObject = new GameObject(objName); setObject.transform.SetParent(_parentObject.transform); setObject.transform.localPosition = new Vector3(setPosition.x + setLength * i + shift, setPosition.y, setPosition.z); // 将Set对象赋为下一层的父对象 // 绘制Set视图 SetView setView = new SetView(_measure.GetMeasureSymbolList()[i], setObject, setLength); } }