Kategori:Sekventiel logik og Objekt Hastighed: Forskellen mellem sider
ard_>Bar No edit summary |
Bar (diskussion | bidrag) No edit summary |
||
Linje 1: | Linje 1: | ||
De to eksempler her på siden er de samme som bruges til [[Objekt Placering]], så beskrivelsen her fokuserer på hvordan objekterne flyttes. | |||
De viste eksempler arbejder begge med en konstant hastighed, der er baseret på Processings [[frameRate]] | |||
==Eksempel baseret på framerate== | |||
[[fil:objektPlacering1.png|right|thumb|260px|Programmets visning af objektplacering]] | |||
Flytningen af objektet sker ved at man lægger en Step-værdi til både posX og posY. Ved at det sker hver gang skærmen opdateres, så vil det se ud som en jævn bevægelse - dog er frameraten sat lavt, så man kan følge med i tallene, og derfor virker det som om det hakker - bare en frameRate på 30 ville gøre at det ser rimeligt jævnt ud. | |||
I dette eksempel ændres ikke på denne step-værdi, men det ville kunne give en ændring i den hastighed objektet bevæger sig med. Et eksempel på dette kan ses i [[spil Hop|hop-eksemplet]], hvor der hele tiden ændres på y-hastigheden, mens x-hastigheden holdes konstant. | |||
Hvis det bare var den generelle hastighed man ville ændre på, så kan man også ændre [[frameRate]]. | |||
<source lang="C"> | |||
int posX = 10; | |||
int posY = 10; | |||
int stepX = 3; | |||
int stepY = 5; | |||
void setup() { | |||
size(400, 200); | |||
frameRate(10); | |||
} | |||
{{ | void draw() { | ||
background(0); | |||
fill(255); | |||
text("X : " + posX, 320, 30); | |||
text("Y : " + posY, 320, 60); | |||
ellipse(posX, posY, 20, 20); | |||
posX += stepX; | |||
if (posX < 10 || posX > width - 10) { | |||
stepX *= -1; | |||
} | |||
posY += stepY; | |||
if (posY < 10 || posY > height - 10) { | |||
stepY *= -1; | |||
} | |||
} | |||
</source> | |||
[[Kategori: | ==Eksempel ud fra en data-model== | ||
[[fil:objektPlacering2.png|right|thumb|220px|Programmets visning af objektplacering]] | |||
I dette eksempel arbejdes med en datamodel, som er et [[2-dimensionelt Array]]. | |||
Bevægelsen sker igen ved at rykke på brikken for hver frame. | |||
Datamodellen binder objektet, så man ikke kan ændre på hvor langt brikken rykkes i hver frame, det vil kun give mening at rykke en ad gangen. | |||
Hvis man ønsker at ændre hastigheden, så er muligheden her at ændre [[frameRate]] | |||
<source lang="C"> | |||
int xWidth = 10; | |||
int yHeight = 20; | |||
int xSize = 15; | |||
int ySize = 15; | |||
int xPos = int(random(xWidth)); | |||
int yPos = 0; | |||
int [][] bane = new int [xWidth][yHeight]; | |||
void setup() { | |||
for (int n = 0; n < xWidth; n++) { | |||
for (int i = 0; i < yHeight; i++) { | |||
bane[n][i] = 0; | |||
} | |||
} | |||
size(220, 420); | |||
strokeWeight(2); | |||
frameRate(10); | |||
textSize(20); | |||
} | |||
void draw() { | |||
background(255); | |||
for (int n = 0; n < xWidth; n++) { | |||
for (int i = 0; i < yHeight; i++) { | |||
if (bane[n][i] == 1) { | |||
fill(180); | |||
rect(n*(xSize + 5) + 10, i*(ySize + 5) + 10, xSize, ySize); | |||
} | |||
} | |||
} | |||
fill(180); | |||
rect(xPos*(xSize + 5) + 10, yPos*(ySize + 5) + 10, xSize, ySize); | |||
fill(0); | |||
text("X : " + xPos, 160, 30); | |||
text("Y : " + yPos, 160, 60); | |||
yPos++; | |||
if (yPos == yHeight - 1) { | |||
bane[xPos][yPos] = 1; | |||
newObject(); | |||
} else if (bane[xPos][yPos+1] == 1) { | |||
bane[xPos][yPos] = 1; | |||
newObject(); | |||
} | |||
} | |||
void newObject() { | |||
yPos = 0; | |||
xPos = int(random(xWidth)); | |||
if (bane[xPos][yPos+1] == 1) { | |||
exit(); | |||
} | |||
} | |||
</source> | |||
==Referencer== | |||
<references /> | |||
{{Spiludvikling}} | |||
[[Kategori:Spil_Data-model]] |
Nuværende version fra 21. okt. 2022, 11:18
De to eksempler her på siden er de samme som bruges til Objekt Placering, så beskrivelsen her fokuserer på hvordan objekterne flyttes.
De viste eksempler arbejder begge med en konstant hastighed, der er baseret på Processings frameRate
Eksempel baseret på framerate
Flytningen af objektet sker ved at man lægger en Step-værdi til både posX og posY. Ved at det sker hver gang skærmen opdateres, så vil det se ud som en jævn bevægelse - dog er frameraten sat lavt, så man kan følge med i tallene, og derfor virker det som om det hakker - bare en frameRate på 30 ville gøre at det ser rimeligt jævnt ud.
I dette eksempel ændres ikke på denne step-værdi, men det ville kunne give en ændring i den hastighed objektet bevæger sig med. Et eksempel på dette kan ses i hop-eksemplet, hvor der hele tiden ændres på y-hastigheden, mens x-hastigheden holdes konstant.
Hvis det bare var den generelle hastighed man ville ændre på, så kan man også ændre frameRate.
int posX = 10;
int posY = 10;
int stepX = 3;
int stepY = 5;
void setup() {
size(400, 200);
frameRate(10);
}
void draw() {
background(0);
fill(255);
text("X : " + posX, 320, 30);
text("Y : " + posY, 320, 60);
ellipse(posX, posY, 20, 20);
posX += stepX;
if (posX < 10 || posX > width - 10) {
stepX *= -1;
}
posY += stepY;
if (posY < 10 || posY > height - 10) {
stepY *= -1;
}
}
Eksempel ud fra en data-model
I dette eksempel arbejdes med en datamodel, som er et 2-dimensionelt Array.
Bevægelsen sker igen ved at rykke på brikken for hver frame.
Datamodellen binder objektet, så man ikke kan ændre på hvor langt brikken rykkes i hver frame, det vil kun give mening at rykke en ad gangen.
Hvis man ønsker at ændre hastigheden, så er muligheden her at ændre frameRate
int xWidth = 10;
int yHeight = 20;
int xSize = 15;
int ySize = 15;
int xPos = int(random(xWidth));
int yPos = 0;
int [][] bane = new int [xWidth][yHeight];
void setup() {
for (int n = 0; n < xWidth; n++) {
for (int i = 0; i < yHeight; i++) {
bane[n][i] = 0;
}
}
size(220, 420);
strokeWeight(2);
frameRate(10);
textSize(20);
}
void draw() {
background(255);
for (int n = 0; n < xWidth; n++) {
for (int i = 0; i < yHeight; i++) {
if (bane[n][i] == 1) {
fill(180);
rect(n*(xSize + 5) + 10, i*(ySize + 5) + 10, xSize, ySize);
}
}
}
fill(180);
rect(xPos*(xSize + 5) + 10, yPos*(ySize + 5) + 10, xSize, ySize);
fill(0);
text("X : " + xPos, 160, 30);
text("Y : " + yPos, 160, 60);
yPos++;
if (yPos == yHeight - 1) {
bane[xPos][yPos] = 1;
newObject();
} else if (bane[xPos][yPos+1] == 1) {
bane[xPos][yPos] = 1;
newObject();
}
}
void newObject() {
yPos = 0;
xPos = int(random(xWidth));
if (bane[xPos][yPos+1] == 1) {
exit();
}
}
Referencer
Sider i kategorien "Sekventiel logik"
De 4 følgende sider er i denne kategori, ud af i alt 4: