標題:
Vector+Sprite
[打印本頁]
作者:
ray
時間:
2013-1-12 10:09
標題:
Vector+Sprite
//Class Vector begin
//類別宣告
function Vector(inc)
{
if(inc == 0)
{
inc = 100;
}
//屬性宣告,定義
this.data = new Array(inc);
this.increment = inc;
this.size = 0;
//方法宣告
this.getCapacity = Vector_getCapacity;
this.getSize = getSize;
this.isEmpty = Vector_isEmpty;
this.getLastElement = getLastElement;
this.getFirstElement = getFirstElement;
this.getElementAt = Vector_getElementAt;
this.addElement = addElement;
this.insertElementAt = insertElementAt;
this.removeElementAt = removeElementAt;
this.removeAllElements = removeAllElements;
this.indexOf = indexOf;
this.contains = contains
this.resize = resize;
this.toString = toString;
this.sort = sort;
this.trimToSize = trimToSize;
this.clone = clone;
this.overwriteElementAt;
}
// getCapacity() -- returns the number of elements the vector can hold
function Vector_getCapacity()
{
return this.data.length;
}
// getSize() -- returns the current size of the vector
function getSize()
{
return this.size;
}
// isEmpty() -- checks to see if the Vector has any elements
function Vector_isEmpty()
{
return this.getSize() == 0;
}
// getLastElement() -- returns the last element
function getLastElement()
{
if (this.data[this.getSize() - 1] != null)
{
return this.data[this.getSize() - 1];
}
}
// getFirstElement() -- returns the first element
function getFirstElement()
{
if (this.data[0] != null)
{
return this.data[0];
}
}
// getElementAt() -- returns an element at a specified index
function Vector_getElementAt(i)
{
try
{
return this.data[i];
}
catch (e)
{
return "Exception " + e + " occured when accessing " + i;
}
}
// addElement() -- adds a element at the end of the Vector
function addElement(obj)
{
if(this.getSize() == this.data.length)
{
this.resize();
}
this.data[this.size++] = obj;
}
// insertElementAt() -- inserts an element at a given position
function insertElementAt(obj, index)
{
try
{
if (this.size == this.capacity)
{
this.resize();
}
for (var i=this.getSize(); i > index; i--)
{
this.data[i] = this.data[i-1];
}
this.data[index] = obj;
this.size++;
}
catch (e)
{
return "Invalid index " + i;
}
}
// removeElementAt() -- removes an element at a specific index
function removeElementAt(index)
{
try
{
var element = this.data[index];
for(var i=index; i<(this.getSize()-1); i++)
{
this.data[i] = this.data[i+1];
}
this.data[getSize()-1] = null;
this.size--;
return element;
}
catch(e)
{
return "Invalid index " + index;
}
}
// removeAllElements() -- removes all elements in the Vector
function removeAllElements()
{
this.size = 0;
for (var i=0; i<this.data.length; i++)
{
this.data[i] = null;
}
}
// indexOf() -- returns the index of a searched element
function indexOf(obj)
{
for (var i=0; i<this.getSize(); i++)
{
if (this.data[i] == obj)
{
return i;
}
}
return -1;
}
// contains() -- returns true if the element is in the Vector, otherwise false
function contains(obj)
{
for (var i=0; i<this.getSize(); i++)
{
if (this.data[i] == obj)
{
return true;
}
}
return false;
}
// resize() -- increases the size of the Vector
function resize()
{
newData = new Array(this.data.length + this.increment);
for (var i=0; i< this.data.length; i++)
{
newData[i] = this.data[i];
}
this.data = newData;
}
// trimToSize() -- trims the vector down to it's size
function trimToSize()
{
var temp = new Array(this.getSize());
for (var i = 0; i < this.getSize(); i++)
{
temp[i] = this.data[i];
}
this.size = temp.length - 1;
this.data = temp;
}
// sort() - sorts the collection based on a field name - f
function sort(f)
{
var i, j;
var currentValue;
var currentObj;
var compareObj;
var compareValue;
for(i=1; i<this.getSize();i++)
{
currentObj = this.data[i];
currentValue = currentObj[f];
j= i-1;
compareObj = this.data[j];
compareValue = compareObj[f];
while(j >=0 && compareValue > currentValue)
{
this.data[j+1] = this.data[j];
j--;
if (j >=0)
{
compareObj = this.data[j];
compareValue = compareObj[f];
}
}
this.data[j+1] = currentObj;
}
}
// clone() -- copies the contents of a Vector to another Vector returning the new Vector.
function clone()
{
var newVector = new Vector(this.size);
for (var i=0; i<this.size; i++)
{
newVector.addElement(this.data[i]);
}
return newVector;
}
// toString() -- returns a string rep. of the Vector
function toString()
{
var str = "Vector Object properties:\n" +
"Increment: " + this.increment + "\n" +
"Size: " + this.size + "\n" +
"Elements:\n";
for (var i=0; i<getSize(); i++)
{
for (var prop in this.data[i])
{
var obj = this.data[i];
str += "\tObject." + prop + " = " + obj[prop] + "\n";
}
}
return str;
}
// overwriteElementAt() - overwrites the element with an object at the specific index.
function overwriteElementAt(obj, index)
{
this.data[index] = obj;
}
//Class Vector end
//Class Sprite begin
//類別宣告
function Sprite(name,pic,w,h,x,y,sw,sh)
{
//屬性宣告,定義
this.name = name;
this.w = w;
this.h = h;
this.sw = sw;
this.sh = sh;
this.x = x;
this.y = y;
this.speed = 1;
//方法宣告
this.show = Sprite_show;
this.move = Sprite_move;
this.shift = Sprite_shift;
this.setPic = Sprite_setPic;
this.collision = SPrite_collision;
//建構子程序
this.pic = new Image();
this.pic.src = pic;
}
//方法定義
function Sprite_show(idx,idy)
{
ctx.drawImage(this.pic,idx*this.w,idy*this.h,this.w,this.h,this.x,this.y,this.sw,this.sh);
}
function Sprite_move(x,y)
{
this.x = x;
this.y = y;
}
function Sprite_shift(dx,dy)
{
this.move(this.x+dx*this.speed,this.y+dy*this.speed);
}
function Sprite_setPic(newPic)
{
this.pic.src = newPic;
}
function SPrite_collision(obj)
{
var rate = 0.5;
if(this.x+(this.sw*rate) > obj.x && this.x < obj.x+(obj.sw*rate) && this.y+(this.sh*rate) > obj.y && this.y < obj.y+(obj.sh*rate))
return true;
else
return false;
}
//Class Sprite end
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/)
Powered by Discuz! 7.2